5

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

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

4

2 回答 2

9

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

如果您想声明您的aptrwithint (*)[5]类型,如您的示例中所示,并使其指向arr,那么这就是您应该设置指针值的方式

aptr = &arr;

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

于 2013-07-05T07:05:25.360 回答
1

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

于 2014-11-01T16:02:32.387 回答