gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:00:02 25 4
gpt4 key购买 nike

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

假设我有一个函数,可以为指向的数组分配一个值。我注意到,虽然两种语法都可以编译,但下面的第二个语法会出现段错误,而第一个语法则运行良好。这是为什么?:

工作正常:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com