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

时间:2015-05-13 20:10:06

标签: c pointers static-allocation

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

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 我无法在代码中写这个,因为我无法使用大量代码和几乎没有文本发布问题。)

1 个答案:

答案 0 :(得分:3)

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

a++;

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

因此,在函数内,两个指针都将指向数组的第二个元素。对于二维数组,其元素是一维数组。而这句话

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

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