0

我通过一个有趣的观察来... 代码是这样的:

main()
{
    int *num[3] = {{1,2,3},{4,5,6},{7,8,9}};
    printf("num = %u &num=%u *num = %d &(*num)=%u",num,&num,*num,&(*num));
}

输出:

num = 3216090596 &num = 3216090596 *num = 1 &(*num)=3216090596

我试图做的是打印我推断的第一个数组的第一个元素的地址(即 1)(如果错了请纠正我),num 是一个整数指针数组,所以当我初始化它存储的数组时三个数组的起始地址。简单地num给出数组 num 的基地址。那么元素 1 的地址是什么

4

2 回答 2

4

任何数组的第一个元素的地址是&array[0], 或array + 0(或简称array)。

任何1数组的元素(即第二个元素)的地址是或。&array[1]array + 1


顺便说一句,当您声明时,您num将其声明为指向整数的指针数组,这是正确的。但是,您并没有像这样初始化它,而是将它初始化为数组数组。你不能像使用数组初始化器{ 1, 2, 3 }并假装它是一个指针。您的代码甚至不应该构建。

如果您希望数组在初始化列表中,您应该正确声明它:

int num[][3] = { ... };
于 2013-05-08T08:36:53.540 回答
0

您初始化的内容类似于二维数组 int num[][3]。在二维中,数组的地址和第一个元素的地址将始终相同。

于 2013-05-08T12:37:46.990 回答