递增指向静态分配数组的指针

Incrementing pointer to static allocated array

在这些情况下,指针 增加了多少,为什么?

void f(int a[])
{
    a++;
    printf("%d", *a);
}

void g(int a[][M])
{
    a++;
    printf("%d", *a[0]);
}

假设在 main 中我有一个 static 分配的 数组,其中包含 n 个元素和 static分配矩阵(2D数组)有n行和M列和我' m 调用函数 fg我不能用代码写这个,因为我无法 post这个问题有很多代码,几乎没有文字).

在这两种情况下,指针只递增一次。:)

a++;

它们的值根据它们指向的对象类型的大小而改变。所以第一个指针的值被sizeof( int )改变,第二个指针的值被sizeof( int[M] )改变 考虑到参数int a[][M]调整为int ( *a )[M]

因此在函数中,两个指针都将指向数组的第二个元素。对于二维数组,它的元素是一维数组。而这个声明

printf("%d", *a[0]);

将输出二维数组的第二个"row"的第一个元素(整数)。