1

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

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

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

假设main我有一个带有n 个元素的静态分配数组和一个带有n行和M列的静态分配矩阵(二维数组),我正在调用函数fg我无法在代码中编写它,因为我无法用大量代码发布问题,几乎没有文字)。

4

1 回答 1

3

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

a++;

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

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

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

将输出二维数组第二“行”的第一个元素(整数)。

于 2015-05-13T20:13:58.910 回答