有人说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数组
答案 0 :(得分:0)
数组和指针之间的区别在于编译器知道数组的大小和大小,因此它可以执行一些静态检查来解决仅使用指针无法实现的计算。
另外,在printf()的情况下,传递它并不重要,因为它是一个可变参数函数。除了格式字符串之外,它对你传递的参数类型一无所知,所以如果你传递%s
参数,你实际上将它转换为char*
。如果你传递一个错误类型的参数,编译器可能会给你一个警告的唯一原因是因为它是一个内部函数,编译器知道它。
大多数采用数组的函数都将它们作为指针参数,所以你在调用函数时也会隐式地将数组转换为指针,除非函数指定数组类型作为参数。