相关疑难解决方法(0)

不完整数组类型的p [0]和*p的等价性

考虑以下代码(它是由于此讨论而产生的):

#include <stdio.h>

void foo(int (*p)[]) {          // Argument has incomplete array type
    printf("%d\n", (*p)[1]);
    printf("%d\n", p[0][1]);    // Line 5
}

int main(void) {
    int a[] = { 5, 6, 7 };
    foo(&a);                    // Line 10
}
Run Code Online (Sandbox Code Playgroud)

GCC 4.3.4 抱怨错误消息:

prog.c: In function ‘foo’:
prog.c:5: error: invalid use of array with unspecified bounds
Run Code Online (Sandbox Code Playgroud)

在GCC 4.1.2相同的错误消息,并且似乎是不变的-std=c99,-Wall,-Wextra.

所以它对表达式不满意p[0],但它很满意*p,尽管这些(理论上)应该是等价的.如果我注释掉第5行,代码会编译并执行我"期望"(显示6)的内容.

大概有以下之一是真的:

  1. 我对C标准的理解是不正确的,这些表达式并不相同.
  2. GCC有一个错误.

我把钱放在(1)上.

问题:任何人都可以详细说明这种行为吗?

澄清: …

c arrays gcc pointers incomplete-type

19
推荐指数
2
解决办法
1723
查看次数

标签 统计

arrays ×1

c ×1

gcc ×1

incomplete-type ×1

pointers ×1