【问题标题】:Accessing specific elements in a multi-dimensional array of pointers in C在 C 中访问多维指针数组中的特定元素
【发布时间】:2017-09-16 09:36:49
【问题描述】:

如何访问具有 i 行和 j 列的 2D 指针数组中的元素 0-K? 我无法看到如何使用嵌套的 for 循环来索引所需的元素,因为不知道 K 是小于还是大于 i 或 j。

所以,我认为有必要提供不同的条件:

if (K < j) {
     //index through the first row
    }

while (K > j) {
     //do some manipulations to determine how many rows to index through 
     }

但这似乎是不必要的复杂。有没有办法使用指针和解引用器从二维指针数组中获取元素 K 的值?

比如说,我想从这个数组中取出值 7:

(注意:这张图片并不能准确反映二维指针数组的外观......我知道本质上是一维数组的数组。)

【问题讨论】:

  • 不清楚你想要什么。举个例子。
  • 二维数组的第 K 个元素将是一维数组。这就是你所追求的吗?
  • "不知道 K 是小于还是大于 i 或 j。" --> 如果K 太大,“访问元素 0-K”不可能
  • 如果你有int array[10][10];并且你想要Kth元素,你可以用array[K / 10][K %10]访问它,如果K &lt; 100
  • for(int r = 0; r &lt; i; ++r){ for(int c = 0; c &lt; j; ++c) { if(r * j + c &lt;= K) access(array[r][c]); } } }

标签: c pointers multidimensional-array indexing


【解决方案1】:

如果我对您的理解正确,那么您需要以下内容。

首先,您可以将二维数组重新解释为一维数组。并且您可以将顺序索引拆分为行和列。

在下面的演示程序中显示了这两种方法。

#include <stdio.h>

#define M   3
#define N   4

int main(void) 
{
    int a[M][N];

    int *p = ( int * )a;

    for ( size_t i = 0; i < M * N; i++ )
    {
        p[i] = i;
    }

    for ( size_t i = 0; i < M * N; i++ )
    {
        printf( "%2d ", a[ i / N ][ i % N ] );
        if ( ( i + 1 ) % N == 0 ) putchar( '\n' );
    }

    return 0;
}

程序输出是

 0  1  2  3 
 4  5  6  7 
 8  9 10 11 

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多