在这些情况下,指针增加了多少以及为什么?
void f(int a[])
{
a++;
printf("%d", *a);
}
void g(int a[][M])
{
a++;
printf("%d", *a[0]);
}
让我们说在main
我有静态分配数组,其中 n 元素和静态分配矩阵(带有 n 行和 M 列的2D数组)我正在调用函数 f 和 g (我无法在代码中写这个,因为我无法使用大量代码和几乎没有文本发布问题。)
答案 0 :(得分:3)
在这两种情况下,指针只增加一次。:)
a++;
它们的值会根据它们指向的对象类型的大小而改变。所以第一个指针的值改变了sizeof( int )
,第二个指针的值改变了sizeof( int[M] )
考虑到参数int a[][M]
已调整为int ( *a )[M]
因此,在函数内,两个指针都将指向数组的第二个元素。对于二维数组,其元素是一维数组。而这句话
printf("%d", *a[0]);
将输出二维数组的第二个“行”的第一个元素(整数)。