福州网站建设咨询,做网站点,网站建设情况介绍,那些网站后台做推广效果好数组面试题解析
字符数组
#xff08;一#xff09;
我们上一篇文章学习了一维数组的面试题解析内容和字符数组的部分内容#xff0c;我们这篇文章讲解一下字符数组和指针剩余面试题的解析内容#xff0c;那现在#xff0c;我们开始吧。
我们继续看一组字符数组的面试…数组面试题解析
字符数组
一
我们上一篇文章学习了一维数组的面试题解析内容和字符数组的部分内容我们这篇文章讲解一下字符数组和指针剩余面试题的解析内容那现在我们开始吧。
我们继续看一组字符数组的面试题
char arr[] abcdef;printf(%d\n, strlen(arr));printf(%d\n, strlen(arr0));printf(%d\n, strlen(*arr));printf(%d\n, strlen(arr[1]));printf(%d\n, strlen(arr));printf(%d\n, strlen(arr1));printf(%d\n, strlen(arr[0]1)); 首先我们可以看到的是第三个和第四个没有这是因为第三个和第四个代码是错的当然不可能打印出来具体细节请看下图 通过这张图我们可以看到strlen的参数是指针类型而在笔试题中参数并不是指针所以会报错。
接下来我们看第一个和第二个这两个都是6这是因为arr和arr0他们两个都是代表的是数组首元素的地址此时一共有6个元素到\0之前
第五个答案是6虽然arr代表的是整个数组的地址但是他仍然指向的是数组的起始位置。
第六个是随机值arr1代表已经跳过了这个数组所以strlen会知道遇到\0才会停止这个\0的位置是不可知的所以才会是随机值。
第七个是5这是因为arr[0]1代表的是数组第二个元素的地址所以答案是5
二
char *p abcdef;printf(%d\n, sizeof(p));printf(%d\n, sizeof(p1));printf(%d\n, sizeof(*p));printf(%d\n, sizeof(p[0]));printf(%d\n, sizeof(p));printf(%d\n, sizeof(p1));printf(%d\n, sizeof(p[0]1)); 首先我们看除了三四的其他几个答案都是8其实应该是4/8看过我们之前那篇文章的朋友应该知道为什么因为是指针代表的是地址的大小而地址的大小是确定的因为编译器环境选择的是x64所以答案是8.
我们再看第三个和第四个他们的答案都是1这是因为他们代表的都是一个字符的大小。都是字符串首字符的大小。
三
char *p abcdef;printf(%d\n, strlen(p));printf(%d\n, strlen(p1));printf(%d\n, strlen(*p));printf(%d\n, strlen(p[0]));printf(%d\n, strlen(p));printf(%d\n, strlen(p1));printf(%d\n, strlen(p[0]1)); 其实这个情况产生的原因和第一题产生的原因是相同的因为第三个和第四个代码本身发生了错误我们在这里再次强调strlen函数的参数是指针类型。而第三个和第四个传入的都是字符。所以代码发生错误。
二维数组
int a[3][4] {0};printf(%d\n,sizeof(a));printf(%d\n,sizeof(a[0][0]));printf(%d\n,sizeof(a[0]));printf(%d\n,sizeof(a[0]1));printf(%d\n,sizeof(*(a[0]1)));printf(%d\n,sizeof(a1));printf(%d\n,sizeof(*(a1)));printf(%d\n,sizeof(a[0]1));printf(%d\n,sizeof(*(a[0]1)));printf(%d\n,sizeof(*a));printf(%d\n,sizeof(a[3])); 接下来让我们一起来进行分析
首先第一个是48是4*12因为a代表的是整个数组一共有12个元素每个元素是整型大小是4个字节。
第二个是4这个代表的是特定的数组元素数量是一个是整型所以是4个字节。
第三个是16这个代表的是二维数组第一行的元素二维数组第一行一共有4个元素每个元素都是整型每个整型4个字节所以一共有16个字节
第四个是8应该是4/8因为是地址嘛这里的arr[0]代表的是第一行的地址。
第五个是4这是因为代表的是数组第二行第一个元素这个元素是Int类型所以大小是4个字节
第六个是8代表的是跳过这个数组之后的地址应该是4/8因为地址的大小是固定的。
第七个是16这是因为他代表的是数组第二行的元素的大小一共4个元素每个元素4个字节所以一共有16个字节
第八个是8应该是4/8这是因为此时代表的是数组第二行的地址
第9,10个是16这是因为第九个表示数组第二行的元素第十个表示数组第一行的元素每一行有4个元素每个元素是4个字节所以一共有16个字节
第十一个答案是16你们感到很奇怪吗因为数组第四行是不存在的但是着这里的话是不存在越界的说法的这是因为sizeof内部的表达式并不会真实的计算