指向数组的指针,指示不兼容的指针类型警告

时间:2013-07-05 07:01:41

标签: c pointers

当我编译以下代码时,我得到warning: assignment from incompatible pointer type [enabled by default]

int main() {
     int (*aptr) [5] = NULL;
     int arr[5] = {1,2,3,4,5};

     aptr = &arr[0];

     printf("aptr = %p\n arr = %p\n", aptr, &arr[0]);
     return 0;
}

我得到了正确的输出:

aptr = 0xbfcc2c64
arr = 0xbfcc2c64

但为什么我会收到不兼容指针类型的警告?

2 个答案:

答案 0 :(得分:8)

您声明了指向整个数组的指针。你为什么试图让它指向第一个元素

如果您要声明aptr int (*)[5]类型,如您的示例所示,并使其指向arr,那么这就是您应该如何设置指针值

aptr = &arr;

您现在在代码中拥有的是尝试为int *类型的指针分配int (*)[5]值。这些是不同的类型,这就是你得到警告的原因(实际上是违反约束,AKA错误)。

答案 1 :(得分:0)

数组名称本身给出了不需要使用的基地址& arr.Moreover arr [0]表示第一个索引处的值。