【问题标题】:Converting multidimensional arrays to pointer notation [duplicate]将多维数组转换为指针表示法[重复]
【发布时间】:2021-05-10 12:11:48
【问题描述】:

对于数组的以下值,我可以这样做:

array[i][j][k] = *(*(*(array+i)+j)+k);
---------------------------------

int xar[3] = {1,2,3};
printf("%d | %d\n", xar[1], *(xar+1));

int xar2[2][3] = {{1,2,3}, {4,5,6}};
printf("%d | %d\n", xar2[1][2], *(*(xar2+1)+2));

int xar3[2][2][2] = {
                      {{1, 2},{3, 4}}, 
                      {{5, 6}, {7, 8}}
                    };
printf("%d | %d\n", xar3[1][1][1], *(*(*(xar3+1)+1)+1));

2 | 2
6 | 6
8 | 8

但是,我在尝试获取数组元素的地址以及为什么这样做时遇到了困难,例如,如果我有:

&array[i][j][k];

array+i 给了我相当于 &array[i] 的效果,但是我该如何获取完整的内部物品呢?

【问题讨论】:

  • *(*(array+i)+j)+k
  • 删除第一个*
  • @ChrisDodd 好的,但你能解释一下它是如何工作的吗?
  • 这能回答你的问题吗? Pointer address in a C multidimensional array
  • 是的,现在听起来是对的,但请注意,周围可能有一些骗子。

标签: c pointers


【解决方案1】:

注意&*array会互相抵消,所以我们可以这样做:

 array[i][j][k] =  *(*(*(array+i)+j)+k);
&array[i][j][k] = &*(*(*(array+i)+j)+k);   // &* can be eliminated
&array[i][j][k] =    *(*(array+i)+j)+k;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2017-09-27
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多