为什么C语言二维数组a[2][2], a和*a输出是相同的,都表示一个地址
#include<stdio.h>intmain(void){inta[2][2]={{1,2},{1,2}};printf("%p\n",a);printf("%p\n...
#include <stdio.h>
int main(void)
{
int a[2][2] = {{1,2},{1,2}};
printf("%p\n",a);
printf("%p\n",*a);
return 0;
}
如书上说的a如果是一维数组首元素地址的话。*a应该是首元素本身吧,也就是数组{1,2},不过printf函数好像是不能输出整个数组的,想请问各位printf是怎么处理*a的输出的,从而使得输出的是和a一样的地址。 展开
int main(void)
{
int a[2][2] = {{1,2},{1,2}};
printf("%p\n",a);
printf("%p\n",*a);
return 0;
}
如书上说的a如果是一维数组首元素地址的话。*a应该是首元素本身吧,也就是数组{1,2},不过printf函数好像是不能输出整个数组的,想请问各位printf是怎么处理*a的输出的,从而使得输出的是和a一样的地址。 展开
展开全部
a指的是这个二维数组第一维数组的首地址,即&a[0] (a+1就是&a[1])
*a指的是这个二维数组的首地址,即&a[0][0] (*a+1就是&a[0][1])
**a指的是这个二维数组第一维数组的首地址指向的值,也就是a[0][0]的值,不是指针
a与*a的值是一样的,因为&a[0]与&a[0][0]是一样的
以下是地址对应关系
a等于&a[0]等于&a[0][0]
a+1等于&a[1]等于&a[1][0]
*a等于&a[0][0]
(*a+1)等于&a[0][1]
*(a+1)等于&a[1][0]
[*(a+1)+1]等于&a[1][1]
*a指的是这个二维数组的首地址,即&a[0][0] (*a+1就是&a[0][1])
**a指的是这个二维数组第一维数组的首地址指向的值,也就是a[0][0]的值,不是指针
a与*a的值是一样的,因为&a[0]与&a[0][0]是一样的
以下是地址对应关系
a等于&a[0]等于&a[0][0]
a+1等于&a[1]等于&a[1][0]
*a等于&a[0][0]
(*a+1)等于&a[0][1]
*(a+1)等于&a[1][0]
[*(a+1)+1]等于&a[1][1]
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询