int a[3][4]; 那么 a,*a,**a分别代表什么?
3个回答
展开全部
声明 int a[3][4];
那么语句中 a,*a,**a分别代表什么呢?
a 代表 数组的首地址。
*a 代表 &a[0][0] 的地址。
**a 代表 a[0][0] 的 值。
----------
c 语言 语句中 方括号 不是标点符号,而是 运算符!
关于 方括号 的 恒等式:
a[j][i] = (a[j])[i] = ( *(a+j))[i] = * ( *(a+j) + i)
我们把 j=0,i=0 代入 就可看出 **a 代表 a[0][0] 的 值。
a[0][0] 的 地址 是 &a[0][0] 或 &( **a) , 一个&和一个* 运算可以抵消, &( **a) = *a
所以 &a[0][0] 等于 *a
a 是首地址,易理解,从略。
------------------------------
#include <stdio.h>
int main(){
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d %d\n", a , &a[0][0]);
printf("%d %d\n", *a , &a[0][0]);
printf("%d %d\n", **a , a[0][0]);
}
对比打印结果,你会加对 **a, *a 的 理解。
那么语句中 a,*a,**a分别代表什么呢?
a 代表 数组的首地址。
*a 代表 &a[0][0] 的地址。
**a 代表 a[0][0] 的 值。
----------
c 语言 语句中 方括号 不是标点符号,而是 运算符!
关于 方括号 的 恒等式:
a[j][i] = (a[j])[i] = ( *(a+j))[i] = * ( *(a+j) + i)
我们把 j=0,i=0 代入 就可看出 **a 代表 a[0][0] 的 值。
a[0][0] 的 地址 是 &a[0][0] 或 &( **a) , 一个&和一个* 运算可以抵消, &( **a) = *a
所以 &a[0][0] 等于 *a
a 是首地址,易理解,从略。
------------------------------
#include <stdio.h>
int main(){
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d %d\n", a , &a[0][0]);
printf("%d %d\n", *a , &a[0][0]);
printf("%d %d\n", **a , a[0][0]);
}
对比打印结果,你会加对 **a, *a 的 理解。
展开全部
**a 指的是 a[0][0] 的值,也就是说数组第一个元素的值
*a : a[3][4] 可以看成 3个 空间为 4的小数组,*a, *(a+1), *(a+2) 可以分别代表 这三个小数组的地址,也可以看做三个小数组首元素的地址,也就是说 *a 代表 a[0][0]的地址
a :自然可以理解成a[0][0]的地址的地址
*a : a[3][4] 可以看成 3个 空间为 4的小数组,*a, *(a+1), *(a+2) 可以分别代表 这三个小数组的地址,也可以看做三个小数组首元素的地址,也就是说 *a 代表 a[0][0]的地址
a :自然可以理解成a[0][0]的地址的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a是一个二维数组,相当于一个二维指针,即int **a;
那么a就是代表整个数组的首地址,
而*a就是代表这个数组第一行的首地址,
**a就是代表这个数组的第一个元素
这里a *a的打印出来的地址值是相同的,因为他们整个数组的首地址就是第一行元素的首地址
那么a就是代表整个数组的首地址,
而*a就是代表这个数组第一行的首地址,
**a就是代表这个数组的第一个元素
这里a *a的打印出来的地址值是相同的,因为他们整个数组的首地址就是第一行元素的首地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询