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

今天不讨论高大上的东西,真就只说一个小知识点:数组啥时候变指针? 答案是:除了初始化和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型数组,甭管是多维数组、指针数组、函数指针数组、数组指针数组…… 不管它有多复杂,结论都是一样的。

原文发布于微信公众号 - 秘籍酷(mijiku040)

原文发表时间:2019-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券