C中的数组指针

Zep*_*hyr 2 c arrays pointers

#include <stdio.h>

void main()
{
 int a[]={1,2,3,4};

 printf("%u %u ",a ,&a);           //a
 printf("%d %d ", *a ,*&a);        //b
}
Run Code Online (Sandbox Code Playgroud)

在ath线的输出a&a是相同的地址,但在第b行*&a不给我答案1.

我知道这&a意味着指向整数数组,但由于地址相同,它应该打印1正确吗?

R S*_*ahu 5

a衰减到指向数组第一个元素的指针.
&a是指向4 ints 数组的指针.

即使两个指针的数值相同,指针也不是同一类型.

键入的a(它衰减到指针后)int*.
Type &a是指向4 ints 数组的指针- int (*)[4].

类型*aint.
Type of *&a是一个4个整数的数组 - int [4]它衰减到指向表达式中第一个元素的指针.

电话

printf("%d %d ", *a ,*&a);
Run Code Online (Sandbox Code Playgroud)

相当于:

printf("%d %d ", *a , a);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你应该%p用于指针.否则,您将调用未定义的行为.提高编译器的警告级别以避免产生此类错误.