我正在经历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.概念是指针和数组之间的一些区别。
答案 0 :(得分:5)
未定义的行为会发生什么,在您的情况下会表现为分段错误。
你最有可能想要这个:
int a[10];
int *b = a;
extern int *b;
extern int a[];
然后,您的两个作业都会在索引3处获取a
的元素,并将其放入x
和y
。