指针知多少(指针进阶习题讲解:数组篇)

这篇博客详细讲解了C语言中指针与一维数组、二维数组的交互,包括sizeof和strlen在不同情况下的应用。通过示例代码,分析了数组名在表达式中的含义,及其对内存大小的影响,同时探讨了字符串作为数组的特殊性。
摘要由CSDN通过智能技术生成

指针进阶的内容基本介绍完毕,如果你自我感觉不错,没有对里面的内容感到迷惑的话,那么我们就开始下面的内容

目录

1.一维数组

1.1int型

1.2字符串

2.二维数组


1.一维数组

1.1int型

首先看下面的代码:

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a+0));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(a[1]));
printf("%d\n",sizeof(&a));
printf("%d\n",sizeof(*&a));
printf("%d\n",sizeof(&a+1));
printf("%d\n",sizeof(&a[0]));
printf("%d\n",sizeof(&a[0]+1));

现在告诉我它们的值分别是什么,在没有给出自己的答案前不要往下看

答案如下:

现在来说说为什么

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));

数组名单独在sizeof内部,求的是数组的大小,单位字节


printf("%d\n",sizeof(a+0));

数组名不是单独在sizeof内部,故代表首元素地址,求的是首元素的地址的大小,为4或8


printf("%d\n",sizeof(*a));

首元素地址解引用,求的是首元素的数据类型的大小


printf("%d\n",sizeof(a+1));

同sizeof(a+0)类似,不过求的是a[1]的地址的大小,为4或8


printf("%d\n",sizeof(a[1]));

这个你要不知道建议把C语言的数组和指针重新再看一遍,别往下看了


printf("%d\n",sizeof(&a));

求数组地址的大小,为4或8


printf("%d\n",sizeof(*&a));

取数组地址再进行解引用,那就是数组的所有元素


printf("%d\n",sizeof(&a+1));

数组的地址再+1,依旧是求地址的大小,为4或8


printf("%d\n",sizeof(&a[0]));

求a[0]的地址的大小,4或8


printf("%d\n",sizeof(&a[0]+1));

a[0]地址+1后还是地址,4或8

上述求地址的值32位机器下为4,64位为8,在vs2019中将x86改为x64就可以看到

后面就不再展示

1.2字符串

现在将数组由

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星鸦wyk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值