二维数组的问题
int a={1,2,3,4,5,6,7,8,9};printf("*a:%p\n",*(a+1));
printf("*a:%p\n",(a+1));
为什么这两个值是一样的?
我知道a表示的是a表示的是第二行的地址。
1.那为什我直接打印a+1的地址和*(a+1)会一样呢?这里的*难道不是取值的意思吗?
因为我自己测试了a和a+1的地址是一样的,所以我认为*(a+1)就应该是a的值啊
求大佬教一下 (a+1)表示a这一行的首地址,可以把这一行看成一个一维数组,(a+1)看成是一个数组名,这样就好理解了。 简单来说就是我想知道为什么*(a+1)表示的是地址{:5_94:}{:5_94:}{:5_94:} 好的我自己搞懂了
虽然a+1表示的是a的地址但是他不等于a他是等于整个第二行如果再加1会等于第三行,只是因为每一行开头的地址都等于a[第几行]
但是*(a+1)他表示的就是a的地址 二位数组的定义过程:
int n = 3, m = 3;
int **a;
a = (int **)malloc(sizeof(int *) * n);
for (int i = 0; i < n; i++)
{
a = (int *)malloc(sizeof(int) * m);
}
所以(a + 1)和*(a + 1)都是指针(因为二位数组名实质上是一个指向指针的指针,也就是两层指针)
页:
[1]