专栏首页秘籍酷C语言(数组啥时候变指针)

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),作者:林世霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言(函数指针和指针函数)

    经翻阅小学五年级语文课本得知,一个短语中的最后部分,是这个短语的中语,其余部分是定语(修饰语)。也就是说,以上短语相当于:

    用户2617681
  • C语言(各种基本定义)

    数组指针即“指向某个数组的指针”,指针数组即“存放了一堆指针的数组”,函数指针即“指向某个函数的指针”,这些与其说是编程语法,不如说是小学语文。

    用户2617681
  • C语言(二维数组)

    有同学在面对二维数组的时候,常常会犯浑。尤其是使用函数传参的时候,有老师讲到一维数组传参后就等价于一级指针,部分同学举一反三自学成才,想当然地认为二维数组传参后...

    用户2617681
  • Python numpy多维数组实现原理详解

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。今...

    砸漏
  • C++小议二维数组

    一、二维数组的介绍 当数组元素具有两个下标时, 该数组称为二维数组。 二维谁可以看做具有行和列的平面数据结构。 二、二维数组的定义 定义二维数组的形式:

    老九学堂-小师弟
  • 指针数组和数组指针

    指针数组 :就是指针的数组,数组的元素是指针;  数组指针:就是指向数组的指针。 简单举例说明:     int *p1[10];    声明了一个数组,数组的...

    lpxxn
  • PHP数组基本用法与知识点总结

    索引数组: 指键名为整数的数组。默认情况下,索引数组的键名是从0开始,并依次递增。它主要适用于利用位置来标识数组元素的情况。另外,索引数组的键名也可以自己指定

    砸漏
  • [jQuery学习系列二 ]2-JQuery学习二-数组操作

    一枝花算不算浪漫
  • 每个数据科学家都应该知道的20个NumPy操作

    关于数据科学的一切都始于数据,数据以各种形式出现。数字、图像、文本、x射线、声音和视频记录只是数据源的一些例子。无论数据采用何种格式,都需要将其转换为一组待分析...

    deephub
  • Java Review (五、数组)

    数组是编程语言中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通 常可通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的...

    三分恶

扫码关注云+社区

领取腾讯云代金券