c - 在C语法说明中通过指针访问数组

标签 c arrays pointers

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

假设我有一个函数,该函数将一个值分配给所指向的数组。我注意到,虽然两种语法都可以编译,但是下面的第二种语法错误,第一种可以正常运行。为什么是这样?:

工作良好:

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/

相关文章:

c++ - pthread_cond_broadcast如何工作?

javascript - 通过Javascript中的值从数组中删除元素

python - 插入项目并更改数组的维度

javascript - 如何使用underscore.js或jQuery检查Object是否具有空数组

c - 将二维数组提升到 C 中的幂

c - 我的程序无法很好地执行搜索功能。为什么?

json - 解码 JSON 时指向接口(interface)的指针与持有指针的接口(interface)

c - 指向带有指针参数的函数的指针

c - 尝试访问sbrk可用空间的阶梯部分后出现seg错误

c - 你将如何使用 scanf() 来扫描你之前创建的值?