c - 如果 int (*p_arr)[10] 被定义为指向大小为 10 的数组的指针,那么为什么编译器在这种情况下会显示警告?

标签 c arrays gcc pointer-to-array

我有这个代码:

#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/

相关文章:

javascript - 如何创建一组相同的值

c - 为什么我的 C 程序没有得到所需的输出?

c - 替换函数或由文本本身定义

c - 我无法编译具有汇编语言指令的程序

javascript - 函数和 if else 语句不起作用

c++ - -fno-strict-aliasing 作为函数属性

c - 输出中出现奇怪的字符

c++ - 最快的插入 C++

c++ - _mm_max_ss 在 clang 和 gcc 之间有不同的行为

c - Linux/海湾合作委员会 : null address "00000000" with pthread compiler option