用指针访问二维数组元素

时间:2018-12-12 23:44:24

标签: arrays pointers multidimensional-array

有人可以解释为什么该程序将“ v”打印为输出吗?我知道该代码的注释部分用于访问第二个字符串的第三个字符,但是第一个字符如何工作?

#include<stdio.h>
int main(void)
{
static char a[3][5] = {"axcd", "efgh","ijkl"};
putchar (*(*a+1)-2);
// putchar (*(*(a+1))+2);
}

1 个答案:

答案 0 :(得分:0)

通常,您应该使用双括号来初始化2D数组,即

static char arr[2][3] = {{"a","b","c"},{"e","f","g"}};

要访问例如第二行和第三列中的“ g”,我们使用:

*(arr + (1 * 3 + 2));

'arr'是存储阵列的内存中的地址。 “ 1”是所需行的索引,“ 3”是每行的长度(==列数)。 “ 2”是我们想要的适当行中元素的索引。

通常情况下,要在第i行和第j列中获取元素,我们使用:

int arr[N][M], i, j;
... //set values for i, j..
*(arr + (i*M + j));