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

use*_*690 3 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;
}
Run Code Online (Sandbox Code Playgroud)

我得到了正确的输出:

aptr = 0xbfcc2c64
arr = 0xbfcc2c64
Run Code Online (Sandbox Code Playgroud)

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

AnT*_*AnT 9

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

如果你想声明你aptrint (*)[5]类型,如你的例子,并指出arr,那么你应该如何设置指针值

aptr = &arr;
Run Code Online (Sandbox Code Playgroud)

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