1

我正在通过 C 并来到以下示例,我无法从“C 上的指针”一书中理解。这是代码。

以下声明存在于一个源文件中:

int     a[10];
int     *b = a;

但是在不同的源文件中,这段代码是这样写的:

extern         int    *a;
extern         int    b[];
int            x, y;
...
x = a[3];
y = b[3];

有人可以解释执行两个赋值语句时会发生什么吗?(假设整数和指针都占用四个字节。)

当我尝试运行代码时,它给了我分段错误x,当我将它注释掉并打印 y 的值时,它给了我 0。这个概念是指针和数组之间的一些区别。

4

1 回答 1

5

发生的是未定义的行为,在您的情况下,这表现为分段错误。

你很可能想要这个:

int     a[10];
int     *b = a;

extern         int    *b;
extern         int    a[];

然后你的两个任务都将获取a索引 3 处的元素并将其放入xandy中。

于 2012-06-30T05:06:20.007 回答