前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言(数组啥时候变指针)

C语言(数组啥时候变指针)

作者头像
用户2617681
发布2019-08-08 16:11:19
1K0
发布2019-08-08 16:11:19
举报
文章被收录于专栏:秘籍酷秘籍酷

今天不讨论高大上的东西,真就只说一个小知识点:数组啥时候变指针? 答案是:除了初始化和sizeof之外,一律会变指针。

以一个简单的int型数组为例:

int a[5] = {1, 2, 3, 4, 5};

那么,当我们在程序中使用a时,它的真面目如下:

int a[5] = {1, 2, 3, 4, 5}; // 此时a是数组 sizeof(a); // 此时a是数组

int *p = a+2; // 此时a是指针 function(a, 2); // 此时a是指针 printf("%d\n", a[1]); // 此时a是指针

上面的例子,就是为了重复说明开始第一段的结论而已,再来一遍:除了初始化和sizeof之外,C语言的任何数组都将一律被视为指针来处理

当然,要补充的一点是:既然数组大多数情况都会被当做指针,那你好歹要说清楚是什么指针呀,是的这非常关键。这个问题的答案是:数组都将一律被视为一个指向其首元素的指针,换句话讲,大多数情况下,数组都等价于其首元素的地址,因此上面的代码完全等价于:

int *p = &a[0]+2; function(&a[0], 2); printf("%d\n", (&a[0])[1]);

最后,诸位看官请注意,以上结论,针对的是任何数组a,并不仅仅是int型数组,甭管是多维数组、指针数组、函数指针数组、数组指针数组…… 不管它有多复杂,结论都是一样的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档