有人说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/