可能重复:
数组名是C中的指针吗?
我正在运行以下代码
#include <stdio.h>
int main()
{
int a[4] = {1,2,3,4};
int (*b)[4] = &a;
int k = sizeof(a);
printf("\n\n%d\n\n", k);
printf("a = %u, b = %u, *b = %u, data = %d", a, b, *b, **b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了以下输出
a = 3485401628, b = 3485401628, *b = 3485401628, data = 1
Run Code Online (Sandbox Code Playgroud)
这里我将a的地址分配给b,因为b的类型是int**,但是在输出中我得到的是a指向的地址与b指向的地址相同.
这对我来说似乎有些困惑.解释是什么?
array的值a是指向数组第一个元素的指针a.
指针的值(与指针&a的值和类型相同b)是指向数组的指针a.
它们具有相同的值(但不同的类型),因为它们都从相同的内存地址开始.在数组的开头没有填充.
当评估a类型int *和&a类型时int (*)[4].
请注意,打印指针地址的正确方法是使用转换说明符p.例如,
/* And p requires the argument to be a void *, so use a cast if
* it is not the case
*/
printf("%p %p\n", (void *) a, (void *) &a);
Run Code Online (Sandbox Code Playgroud)