指针算术和c中的二维数组?

mig*_*WOZ 2 c arrays multidimensional-array

我是C的新手并且坚持"如何将多维数组传递给函数".我知道你必须传递列大小,这样如果你想要去它a[0][0],a[1][0]它可以计算一维数组的大小,并可以跳过它.

我写了一个小程序:

#include<stdio.h>
void foo(char[][2]);
int main()
{
     char arr[2][2] = {'a','b','c','d'};

     foo(arr);
     return 0;
}

void foo(char temp[][2])
{
      temp++;
      printf("%c",*temp);
}
Run Code Online (Sandbox Code Playgroud)

我期望这段代码会打印这个字母c,因为temp最初指向'a'并且一旦我们递增它,它将跳过第一个1-d数组并转到第二个1-d数组的第一个元素'c'.但是我认为这种方式不起作用.

请解释编译器如何计算这些地址.

Mik*_*CAT 6

指针算术很好.你只是忘了取消引用*temp,它有类型char[2].

将其更改为**temp,您将获得输出c.