二维数组的首地址和数组名

    xiaoxiao2023-09-26  135

    二维数组a[M][N]的数组名 a 表示的是谁的地址?

    在一维数组中,数组名表示的是数组第一个元素的地址,那么二维数组呢? a表示的是元素a[0][0]的地址?不是! 我们说过,二维数组就是一维数组 二维数组a[3][4]就有三个元素, 所以数组a的第一个元素不是a[0][0],而是a[0]的地址, 即:

    a == &a[0];

    而a[0]又是a[0][0]的地址,即:

    a = &(&a[0][0])

    即二维数组名 a 就是地址的地址,必须两次取值才可以取出数组中存储的数据。对于二维数组a[M][N],数组名a 的类型为 int(*)[N],所以如果定义了一个指针变量 p:

    int *p;

    并希望这个指针变量指向二维数组 a,那么不能把 a 赋值给 p,因为他们的类型不一样,要么把 &a[0][0]赋值给 p,要么把 *a 赋值给 p,前两个好解释,可为什么可以把 *a赋值给 p呢?

    因为 a == &(&a[0][0]),所以 *a == *(&(&a[0][0])) == &[0][0]

    除此之外你可以把指针变量 p 定义为int(*)[N]型,这个时候就可以把 a 赋值给 p,而且用你这种方法的人比较多,但是我不太喜欢。

    如果将二维数组名 a 赋值给指针变量 p:则有:

    最新回复(0)