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/

相关文章:

arrays - Bash比较数组值以找到最大值

c - 通过串联将位(字节)存储在 long long 中

c - 指向链表指针数组的指针

c - 指针定义上的语法错误似乎有效(来自工作库)SDCC

C 获取文件/目录的所有者和组

javascript - 如何添加名称已作为另一个属性存在的 JSON 项?

c++ - C++ try/catch 与 C setjmp/longjmp 有何不同?

c - 将 const char * 传递给 C 函数

c - 在 C 项目中导入/包含其他库

python从c_char列表中生成字符串