gpt4 book ai didi

c - 使用指向数组层的指针遍历数组层

转载 作者:太空狗 更新时间:2023-10-29 17:13:41 25 4
gpt4 key购买 nike

                         |--------|     
// / |4 4 4 |
// |--------| 4 |
// / |3 3 3 | 4 |
// |---------|3 | |
// / | 2 2 2 |3 | /
// |---------|2 |__|
// | 1 1 1 |2 | /
// | 1 1 1 |__|
// | 1 1 1 | /
// |_________|
double arr[4][3][3] = {{1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2},{3,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,4}};

我认为这个数组由4层组成。

我想创建指向数组层的指针并使用指针遍历该数组的层。

我试试:

double (*pp1)[sizeof(arr[0]) / sizeof(ar[0][0][0])]; 
pp1 = arr[0];

并从 intelIsense 获取错误信息:(double (*)(3) 类型的值不能赋值给 double(*)(9)

最佳答案

所以如果你这样做:

int i;
double arr[4][3][3] = {{1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2},
{3,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,4}};

double (*pp3)[3][3];
pp3 = arr;
for (i = 0; i <= 3; i++)
{ printf("pp3 + %d is %f \n", i, ***(pp3 + i));
}

然后您将获得所需的行为。您的代码的问题在于,正如编译器告诉您的那样,您正在尝试将指针分配给 9 double (double (*pp1)[sizeof(arr[0]/sizeof(arr[ 0][0][0])] 的计算结果为 double (*pp1)[9] ),但是您需要一个指向 3 数组的 3 数组的指针,即你用 double arr[4][3][3] 声明的内容。根据我的测试,gcc 将接受带有编译器警告的 double (*pp1)[9] ,这就是我在下面的评论中试图表达的意思。希望一切都清楚了。

如果你想保持这个一般性,那么你真正想要的是 double (*pp3)[sizeof(arr[0])/sizeof(arr[0][0])][sizeof(arr[ 0][0])/sizeof(arr[0][0][0])],这是一场该死的噩梦。

编辑:忘记取消引用...应该复制/粘贴哈哈。还添加了有关问题代码行为的解释。根据评论修复。

关于c - 使用指向数组层的指针遍历数组层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422220/

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