然后说一下这个,基础知识 | 每日一练(64)

基础知识练习

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

学生:既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr 和 &arr 又

有什么区别呢?

小林:区别在于类型。在标准 C 中, &arr 生成一个 “T 型数组” 的指针, 指向整个数组。在 ANSI 之前的 C 中, &arr 中的 & 通常会引起一个警告, 它通常被忽略。在所有的 C 编译器中, 对数组的简单引用(不包括 & 操作符)生成一个 T 的指针类型的指针, 指向数组的第一成员。

学生:我如何声明一个数组指针?

小林:通常, 你不需要。当人们随便提到数组指针的时候, 他们通常想的是指向它的第一个元素的指针。考虑使用指向数组某个元素的指针, 而不是数组的指针。

类型 T 的数组蜕变成类型 T 的指针, 这很方便; 在结果的指针上使用下标或增量就可以访问数组中单独的成员。

而真正的数组指针, 在使用下标或增量时, 会跳过整个数组, 通常只在操作数组的数组时有用 —— 如果还有一点用的话。

如果你真的需要声明指向整个数组的指针, 使用类似 “int (*ap)[N];” 这样的声明。其中 N 是数组的大小。

如果数组的大小未知, 原则上可以省略N, 但是这样生成的类型, “指向大小未知的数组的指针”, 毫无用处。

正文完