当我编译以下代码时,我收到警告:从不兼容的指针类型赋值[默认启用]
:
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
但为什么我会收到不兼容指针类型的警告?
最佳答案
您声明了一个指向整个数组的指针。你为什么要让它指向第一个元素?
如果你想用 int (*)[5]
类型声明你的 aptr
,就像你的例子一样,并让它指向 arr
,那么这就是你应该如何设置指针值
aptr = &arr;
您现在在代码中尝试将 int *
值分配给 int (*)[5]
类型的指针。这些是不同的类型,这就是您收到警告的原因(实际上是违反约束,也称为错误)。
关于c - 指向给出不兼容指针类型警告的数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17482921/