作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有这个代码:
#include <stdio.h>
int main()
{
int arr[10] = {0};
int *p1_arr = arr;
int (*p2_arr)[10] = arr; // Line 7, Shows Warning here
...
return 0;
}
在 gcc
上使用 gcc -g -Wall LengthofArray.c
编译时,它显示以下警告:
gcc: LengthOfArray.c:7: [Warning] assignment from incompatible
pointer type [enabled by default]
我的问题是,如果 int (*p2_arr)[10]
是一个指向大小为 10 的数组的指针,那么为什么编译器会显示此警告?
那么正确的做法是什么?
我在 Windows 7 32 位 (DevC++) 上使用 gcc 4.7.2
并且还检查了 SLES 10.3 x86_64 上的 gcc 4.1.2
最佳答案
... if int (*p2_arr)[10] is a pointer to an array of size 10 ...
由于 p2_arr
指向一个大小为 10 的数组,您需要分配一个大小为 10 的数组的地址:
int (*p2_arr)[10] = &arr;
关于c - 如果 int (*p_arr)[10] 被定义为指向大小为 10 的数组的指针,那么为什么编译器在这种情况下会显示警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454312/
当我用 gcc -Wall -pedantic -ansi -std=c89 编译下面的代码时,它编译成功,没有在指针赋值处给出错误。请注意,我从 int (*)[4] 转换为 int (*)[]。
我有这个代码: #include int main() { int arr[10] = {0}; int *p1_arr = arr; int (*p2_arr)[10] =
我是一名优秀的程序员,十分优秀!