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

时间:2017-05-10 16:51:59

标签: 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

正如一个答案所说,这是因为我指定的%类型,这是有道理的,因为我写的时候

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

输出:你好

这里提出了两个问题:

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

2)如何以相同的方式打印int数组,即printf中的int类型为int数组

1 个答案:

答案 0 :(得分:0)

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

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

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