指针和数组笔试题1

复习:

sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小;

&数组名,数组名表示整个数组,取出的是整个数组的地址;

除此之外,所以的数组名都是数组首元素的地址。

一、一维数组

1.sizeof(a),a表示整个数组,计算的是整个数组的大小,为4*4=16。

2.sizeof(a+0),a表示数组首元素的地址,a+0是第一个元素的地址,因此计算的是地址的大小,为4(32位平台)或8(64位平台)。

3.sizeof(*a),a表示数组首元素地址,对其进行解引用操作,得到数组首元素,所以sizeof(*a)计算的是数组第一个元素的大小,为4。

4.sizeof(a+1),与第二个类似,a+1是第二个元素的地址,所以为4或8。

5.sizeof(a[1]),a[1]相当于*(a+1),是数组的第二个元素,计算的是第二个元素的大小,为4。

6.sizeof(&a),&a取出的是整个数组的地址,但也是地址,地址的大小为4或8。

7.sizeof(*&a),&a取出整个数组的地址,再对其解引用,得到的是整个数组,计算整个数组的大小,为16。( int (*p)[4] = &a )

8.sizeof(&a+1),&a+1 表示的是数组后面的空间的地址,为4或8。

9.sizeof(&a[0]),&a[0]表示第一个元素的地址,为4或8。

10.sizeof(&a[0]),&a[0]是第一个元素的地址,加1就是第二个元素的地址,为4或8。

二、字符数组

1.sizeof(arr),计算整个数组的大小,为6。

2.sizeof(arr+0),arr+0是第一个元素的地址,计算第一个元素的地址的大小,为4或8。

3.sizeof(*arr),arr表示数组的首元素地址,解引用得到第一个元素,计算第一个元素的大小,为1。

4.sizeof(arr[1]),arr[1]表示的是第一个元素,其大小为1。

5.sizeof(&arr),&arr取出的是整个数组的地址,大小为4或8。

6.sizeof(&arr+1),&arr+1表示数组后面的空间的地址,为4或8。

7.sizeof(&arr[0]+1),&arr[0]是第一个元素的地址,加1表示第二个元素的地址,为4或8。

8.strlen()函数是从字符串的开头位置依次向后计数,直到遇到'\0',然后返回计时器的值。最终统计的字符串长度不包括'\0'。而题目中的这种初始化方式没有放'\0',因此strlen向后计数时找不到'\0',因此strlen(arr),strlen(arr+0),strlen(&arr),strlen(&arr+1),strlen(&arr[0]+1)输出的都是随机值。

9.strlen()函数括号内放的应该是一个地址,而*arr,arr[1]表示的是数组的第一个元素,因此这种写法是错误的。

char arr[ ] = "abcdef"这种初始化方式在字符串的最后面默认放一个'\0',而sizeof计算时会把'\0'也包括在内,strlen计算时不包括'\0'。

1.sizeof(arr),计算整个数组的大小,为7。

2.sizeof(arr+0),计算第一个元素的地址的大小,为4或8。

3.sizeof(*arr),计算第一个元素的大小,为1。

4.sizeof(arr[1]),计算的也是第一个元素的大小,为1。

5.sizeof(&arr),计算整个数组的地址的大小,为4或8。

6.sizeof(&arr+1),计算的是数组后面一块空间的地址的大小,为4或8。

7.sizeof(&arr[0]+1),计算第二个元素的地址的大小,为4或8。

8.strlen(arr),计算字符串的长度(不包括'\0'),因此为6。

9.strlen(arr+0),arr+0表示第一个元素的地址,计算的是从第一个元素开始到'\0'之间的长度,为6。

10.strlen(*arr)和strlen(arr[1])这种写法是错误的。

11.strlen(&arr+1),&arr+1是跳过整个数组,指向数组后面一块空间的位置,而在这块空间上找不到'\0',因此返回值为随机值。

12.strlen(&arr[0]+1),&arr[0]+1是第二个元素的地址,计算的是从第二个元素开始到'\0'之间的长度,为5。

  • 15
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值