递增指向静态分配数组的指针
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 调用函数 f 和 g(我不能用代码写这个,因为我无法 post这个问题有很多代码,几乎没有文字).
在这两种情况下,指针只递增一次。:)
a++;
它们的值根据它们指向的对象类型的大小而改变。所以第一个指针的值被sizeof( int )
改变,第二个指针的值被sizeof( int[M] )
改变
考虑到参数int a[][M]
调整为int ( *a )[M]
因此在函数中,两个指针都将指向数组的第二个元素。对于二维数组,它的元素是一维数组。而这个声明
printf("%d", *a[0]);
将输出二维数组的第二个"row"的第一个元素(整数)。
在这些情况下,指针 增加了多少,为什么?
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 调用函数 f 和 g(我不能用代码写这个,因为我无法 post这个问题有很多代码,几乎没有文字).
在这两种情况下,指针只递增一次。:)
a++;
它们的值根据它们指向的对象类型的大小而改变。所以第一个指针的值被sizeof( int )
改变,第二个指针的值被sizeof( int[M] )
改变
考虑到参数int a[][M]
调整为int ( *a )[M]
因此在函数中,两个指针都将指向数组的第二个元素。对于二维数组,它的元素是一维数组。而这个声明
printf("%d", *a[0]);
将输出二维数组的第二个"row"的第一个元素(整数)。