C 为什么数组中的a[]、&a和a是相同的?

C 为什么数组中的a[]、&a和a是相同的?,c,arrays,pointers,C,Arrays,Pointers,在本节目中: #include <stdio.h> int main() { int a[2]; int *b=&a; printf("%p\n",a); printf("%p\n",&a); printf("%p",b); return 0; } &a是int*[2]。i、 指向数组的指针 但是int*b=&a;指定给整数指针。虽然它指向正确的地址,但您需要键入cast以删除警告消息 添加int*like 打印10

在本节目中:

#include <stdio.h>

int main()
{
    int a[2];
    int *b=&a;
    printf("%p\n",a);
    printf("%p\n",&a);
    printf("%p",b);
    return 0;
}
&a是int*[2]。i、 指向数组的指针

但是int*b=&a;指定给整数指针。虽然它指向正确的地址,但您需要键入cast以删除警告消息

添加int*like


打印10和20

阅读,我想我已经在这里回答了你的问题,这有点重复。ty,这两个都是有用的你错过了&a[0]:我的意思是,通常人们会问a,&a&&a[0]之间的区别。。。OP只问了2个…你的演员阵容不正确。若要获取有效代码,必须使用有效指针或指向a的b点,而不是&a。仅使用int*b=a就足够了,或者使用int*b=&a[0]删除衰减消息。最好是使用合适的指针。但是为什么演员在这里是错误的@GrijeshChauhan为什么要使用强制转换来修复错误的赋值,而你却可以正确地完成任务@amfad33读取我链接的答案a的类型为int[2],当分配给b时,会衰减int到int*。And&a是数组的地址,而不是第一个元素。要指定数组的地址,您需要将b声明为int*b[2]=&a;
[Warning] initialization from incompatible pointer type [enabled by default]
int *b=(int*)&a;

#include <stdio.h>

int main()
{
    int a[2] = {10,20};
    int *b=(int*)&a;

    printf("\n :%d   %d\n", b[0], b[1]);
#if 0
    printf("%p\n",a);
    printf("%p\n",&a);
    printf("%p",b);
#endif
    return 0;
}