【发布时间】:2018-01-12 11:56:26
【问题描述】:
我只是想了解如何实现二维数组以及如何进行内存分配。所以我对给定的 c 程序有些疑问,为什么 a 和 *a 给出相同的地址。
#include<stdio.h>
main()
{
int i,j;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",*(*(a+i)+j));
}
printf("\n");
}
printf("%d\n",a);
printf("%d\n",a[0]+1);
printf("%d\n",a[0][0]);
printf("%d\n",a+1);
printf("%d\n",*a);
}
【问题讨论】:
-
请使用
printf("%p\n", (void*)expr)正确安全地打印指针值。 -
@underscore_d 为了公正对待 OP:您列出的所有问题都不是在问同样的事情。 OP dereferences 一个数组(与获取其地址完全相反!)并且惊讶地发现在将其值“调整”为指针(通过将其传递给 @ 987654329@)。他也不怀疑数组是否是指针,这将是一个完全不同的问题。
标签: c arrays multidimensional-array