声明和定义之间的数组/指针不匹配 - 那么会发生什么?

时间:2012-06-30 04:58:03

标签: c

我正在经历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.概念是指针和数组之间的一些区别。

1 个答案:

答案 0 :(得分:5)

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

你最有可能想要这个:

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

extern         int    *b;
extern         int    a[];

然后,您的两个作业都会在索引3处获取a的元素,并将其放入xy