gpt4 book ai didi

c - 指向 C 中指针的指针未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:37 24 4
gpt4 key购买 nike

我正在学习 C 中的指针。我有一个二维整数数组,我正在尝试将所有元素添加到一行中。二维数组名称是 a。我知道 a 是指向数组行的指针,它们本身是指向整数元素的指针。我想遍历整个数组 a。所以,我声明一个指针 **pp 等于 a,因为 a 是指向指针的指针。但是程序在运行时崩溃了。

int main(void){
int sum=0;
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int **pp = NULL;
int *p = NULL;

for (pp=a;pp<a+3;pp++){
for (p=*pp;p<*pp+3;p++)
sum += *p;

printf("sum = %d\n", sum);
sum = 0;
}
}

我知道二维数组第一个对象的地址就是a。第二个对象的地址是a+1等等。例如,矩阵元素 i,j 将是 *(*(a+i)+j)。换句话说,如果我将指针变量 pp 设置为 (a+i),我就知道我在第 i 行。第 i 行的第一个整数元素的地址是 *(a+i),这就是我制作 p=*pp 的原因。所以元素 (i,0) 应该是 *p*(*(a+i)+0) 相同。那么,为什么代码没有按预期运行?

最佳答案

二维数组不是指向指针的指针。一般来说,数组不是指针,指针也不是数组。总是remember

"pointer arithmetic and array indexing [that] are equivalent in C, pointers and arrays are different".

a3 的数组3 的数组int秒。 pp是指向 int 的指针.在表达式中使用时,在大多数情况下,数组会转换为指向其第一个元素的指针。因此,在 pp = a; , a转换为 int (*)[3]这与 pp 不兼容的类型 int ** .声明pp作为int (*)[3] .

int (*pp)[3];

关于c - 指向 C 中指针的指针未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545561/

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