在C语法澄清中通过指针访问数组

时间:2017-02-21 21:00:42

标签: c arrays pointers

这是我今天遇到的一个相当基本的问题,想知道两种语法之间的区别。

假设我有一个函数为指向的数组赋值。我注意到,虽然两种语法都编译,但第二种语法会出现故障,第一种运行正常。这是为什么?:

工作正常:

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);
}

我编写了所有这些代码作为示例,如果需要任何澄清,请告诉我。

1 个答案:

答案 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