这是我今天偶然发现的一个相当基本的问题,想知道两种语法之间的区别。
假设我有一个函数,可以为指向的数组分配一个值。我注意到,虽然两种语法都可以编译,但下面的第二个语法会出现段错误,而第一个语法则运行良好。这是为什么?:
工作正常:
foo(int** arr){
for (i = 0; i < SUM; i++){
(*arr)[i] = i+1;
}
}
段错误:
foo(int** arr){
for (i = 0; i < SUM; i++){
*arr[i] = i+1;
}
}
示例主要:
main(){
int* _arr;
arr = (int *)malloc(sizeof(int)*50);//arbitrary
foo(&_arr);
}
我编写了所有这些代码作为示例,如果需要任何说明,请告诉我。
最佳答案
您面临运算符优先级/优先级问题。
(*arr)[i]
正确地将arr
取消引用到数组中,然后添加i
来获取值。*arr[i]
首先采用arr+i
(如果i>0
则未初始化内存:您只有 1 个数组)并尝试从该无效指针读取:segfault
关于c - C 语法澄清中通过指针访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42377882/