c - 为什么数组保存 C 中第一个元素的地址?

标签 c arrays pointers

有人说c中的数组不是指向数组首元素的指针 why is array name a pointer to the first element of the array? 因此,当您使用“printf”在 c 中打印数组时,例如为什么它显示第一个元素的地址而不是数组元素的地址?

更新:

const char  h[10]="Hello";
printf("%p", h);

输出:00AFFE0C

还有一个答案说,这是因为我指定的 %type 而发生的,这是有道理的,因为当我写

printf("%s", h);
OR
printf(h);

输出:你好

这里有两个问题:

1) 在 printf(h) 中;为什么它不衰减数组并打印指针值,因为在衰减数组中将被转换为指针

2) 如何以相同的方式打印一个 int 数组,即 int 数组的 printf 中的 %type 是什么

最佳答案

数组和指针之间的区别在于,编译器知道数组的大小和维数,因此它可以执行一些仅使用指针无法实现的静态检查地址计算。

此外,在 printf() 的情况下,传递给它的内容无关紧要,因为它是一个可变参数函数。它不知道你传递给它的参数的类型,除了格式字符串,所以如果你传递一个 %s 参数,你实际上是将它转换为 char*。如果您传递错误类型的参数,编译器可能会向您发出警告的唯一原因是因为它是一个内部函数并且编译器知道它。

大多数采用数组的函数都将它们作为指针参数,因此您在调用函数时也会将数组隐式转换为指针,除非函数将数组类型指定为参数。

关于c - 为什么数组保存 C 中第一个元素的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43898522/

相关文章:

arrays - 如何在 Swift 中获取指向数组的指针(而不是副本)?

javascript - 对包含数字和字符串的二维数组进行排序

c - C 中的数组地址减法

c - 将变量分配给结构体数组的成员时出现预期标识符或 '(' 错误

c - 无法在C中的父进程和子进程之间发送信号

c - C图形:如何在屏幕上绘制x-y轴?

用C计算文本文件中完整基因的数量

javascript - 如何在 JavaScript 中创建数组?

c - 使用和不使用 & 传递指向函数的指针

c - 使用引用传递时出现意外错误