C语言怎么理解【*(a+1)+2】和【*(*(a+1)+2)】,星号不是取地址吗?那两个星号怎么解释

错了,星号取值,那两个星号怎么理解

我举个例子吧,似乎没有上下文比较难理解。
假设a[M][N]表示一个大小为M*N的二维数组
【*(a+1)+2】:是a[1][2]的地址,也可以用&a[1][2]来表示。
【*(*(a+1)+2)】:是a[1][2]的值;
*(a+1)取的是a[1][0]的地址,想要获得a[1][0]的值,则需要写成*(*(a+1)),因为是二维数组,所以需要取两次*才能获得值。更大维度的情况以此类推。追问

那a+1有实际含义吗

追答

有,如果是*a的话,表示的就是a[0][0]的地址。上个例子里的1和2可以用c,d表示,那么,c可以控制的是数组的所在行,而d控制的是数组的所在列

追问

我直接
printf ("%d",a)
结果是地址。
那输出*a应该是内容了吧

追答

a本身就是个地址。。。而且你可以试下*a也是地址,而且和a的地址应该是一样的,你找本c语言的书,关于二维数组地址的,上面有很详细的说明的,应该有图,看图就很方便明白了

追问

书上面是这样写啊
只是不明白为什么a和*a是一样的(实际一样,书也是这么写)

追答

这是因为这里a是多维数组的关系(这里是二维)。。要是一维数组,a是地址,*a是值。要是三维数组的话,a,*a,**a都是地址。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-03
*是取内容(定义的时候是指针的说明),&是取地址(有时也是引用)。

*(a+1)+2 含义是将a指针移1个单位(这个单位的大小需要看a是什么类型的指针),然后取出移位后指向的值,在+2;

*(*(a+1)+2),如果a是指向也是指针,那就是取出移一个单位+2之后所指向的指针所指向的值。a,就相当于一个二级指针。
第2个回答  2012-07-03
星号是指针吧,第二个可能是二维数组*(a+1)是行指针。这样的话第二个代表a[1][2]的值,第一个代表a[1][2]的地址。如果有a的定义就好判断了。
第3个回答  2012-07-03
*不是取地址,而是取相应地址中的值,第一个a是一个指针,第二个a是一个指向指针的指针
第4个回答  2012-07-03
a应该是个二维数组吧,前一个结果应该还是个地址,后一个是元素的值,
&取地址,*取值
相似回答