这是我今天遇到的一个相当基本的问题,想知道两种语法之间的区别。
假设我有一个函数为指向的数组赋值。我注意到,虽然两种语法都编译,但第二种语法会出现故障,第一种运行正常。这是为什么?:
工作正常:
foo(int** arr){
for (i = 0; i < SUM; i++){
(*arr)[i] = i+1;
}
}
Seg fault:
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);
}
我编写了所有这些代码作为示例,如果需要任何澄清,请告诉我。
答案 0 :(得分:1)
您面临运营商优先级/优先级问题。
.Discontinued_False {
background-color: green;
color: transparent;
}
.Discontinued_True{
background-color: Crimson;
color: transparent;
}
将(*arr)[i]
正确解引用到数组中,然后添加arr
以获取值。
i
首先获取*arr[i]
(未初始化的内存,如果arr+i
:您只有1个数组)并尝试从该无效指针读取:segfault