您的位置:首页 > 文旅 > 旅游 > 数组和指针 笔试题(1)

数组和指针 笔试题(1)

2025/5/2 15:39:34 来源:https://blog.csdn.net/2301_80349538/article/details/141783861  浏览:    关键词:数组和指针 笔试题(1)

目录

0.复习

1.笔试题1

2.笔试题2

3.笔试题3

4.笔试题4

5.笔试题5


b044b84733a64819ba44f4c9451d247e.gif

0.复习

在做笔试题之前,我们首先复习一下数组名的理解

数组名的所有情况:

1.&数组名,取出的是整个数组的地址

2.sizeof(数组名),这里的数组名表示整个数组,这里的数组名必须单独出现

3.其余所有情况都为首元素地址

其次我们复习一下 sizeof 和 strlen 的知识

sizeof测量字节大小

strlen测量字符串长度,直到 '\0' 停止


1.笔试题1

//笔试题1
int a[] = { 1,2,3,4 };
printf("%zd\n", sizeof(a));
//a表示整个数组,sizeof测量整个数组,打印16
printf("%zd\n", sizeof(a + 0));
//a是数组首元素地址,地址加0,还是首元素地址,是地址就打印4/8
printf("%zd\n", sizeof(*a));
//首元素地址解引用=1,打印4
printf("%zd\n", sizeof(a+1));
//首元素地址加1,跳过1个sizeof(int),但是是地址,是地址就打印4/8
printf("%zd\n", sizeof(a[1]));
//首元素,打印4
printf("%zd\n", sizeof(&a));
//取出整个元素地址,整个元素地址为首元素地址,是地址就打印4/8
printf("%zd\n", sizeof(*&a));
//取出整个元素地址,解引用为整个数组,16
printf("%zd\n", sizeof(&a+1));
//是地址,打印4/8
printf("%zd\n", sizeof(&a[0]));
//取出首元素地址,是地址就打印4/8
printf("%zd\n", sizeof(&a[0] + 1));
//取出首元素+1个sizeof(int)的地址,是地址就打印4/8

sizeof(地址),是地址就打印 4/8


2.笔试题2

//笔试题2
char arr[] = { 'a','b','c','d','e','f' };
printf("%zd\n", sizeof(arr)); 
//传递的是整个数组,打印6
printf("%zd\n", sizeof(arr+0));
//传递首元素地址,加0还是地址,是地址就打印4/8
printf("%zd\n", sizeof(*arr));
//传递的是首元素,首元素地址解引用 = 'a',打印1
printf("%zd\n", sizeof(arr[1]));
//首元素,打印1
printf("%zd\n", sizeof(&arr));
//传递的是整个数组的地址,是地址就打印4/8
printf("%zd\n", sizeof(&arr+1));
//传递的是地址,是地址就打印4/8
printf("%zd\n", sizeof(&arr[0]+1));
//传递的是首元素的地址加1,指向的是第二个元素的地址,是地址就打印4/8

3.笔试题3

知识:strlen接受的参数是字符型地址

字符串都是从哪个地址开始数

//笔试题3
char arr[] = { 'a','b','c','d','e','f' };
printf("%zd\n", strlen(arr)); 
//传递的是首元素的地址,从a开始数,没有'\0'打印随机值
printf("%zd\n", strlen(arr+0));
//传递的是首元素地址,从a开始数,没有'\0'打印随机值
printf("%zd\n", strlen(*arr));
//传递的是字符a,错误传递,strlen接受的参数是地址,报错
printf("%zd\n", strlen(arr[1]));
//传递的是字符a,strlen接受的参数是地址,报错
printf("%zd\n", strlen(&arr));
//传递的是整个元素的地址,也就是从a开始数,没有'\0'打印随机值
printf("%zd\n", strlen(&arr+1));
//传递的是整个元素的地址加1,跳过了整个数组的地址,没有'\0'打印随机值
printf("%zd\n", strlen(&arr[0]+1));
//传递的是首元素地址加1,所以传递的是b的地址,从b开始数,没有'\0'打印随机值

4.笔试题4

//笔试题4
char arr[] = { "abcdef" };
printf("%zd\n", strlen(arr)); 
//传递的是首元素的地址,从首元素地址开始数,打印6
printf("%zd\n", strlen(arr+0));
//从首元素地址开始数打印6
printf("%zd\n", strlen(*arr));
//传递的不是地址,报错
printf("%zd\n", strlen(arr[1]));
//传递的不是地址,报错
printf("%zd\n", strlen(&arr));
//从首元素开始数,打印6
printf("%zd\n", strlen(&arr+1));
//跳过一整个数组,打印随机数
printf("%zd\n", strlen(&arr[0]+1));
//从第二个元素的地址开始数,打印5

5.笔试题5

	//笔试题5char arr[] = { "abcdef" };printf("%zd\n", sizeof(arr)); //传递的是整个数组,但是字符串带 '\0' ,打印7!!!printf("%zd\n", sizeof(arr+0));//传递的是首元素地址,是地址就打印4/8printf("%zd\n", sizeof(*arr));//传递的是首元素,打印1printf("%zd\n", sizeof(arr[1]));//打印1printf("%zd\n", sizeof(&arr));//传递的是整个元素的地址,是地址就打印4/8printf("%zd\n", sizeof(&arr+1));//传递的是跳过整个元素的地址,是地址就打印4/8printf("%zd\n", sizeof(&arr[0]+1));//传递的是首元素地址加1,就是第二个元素的地址,是地址就打印4/8

048348842c894b78a320466e0b48b67d.png

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com