跪求C++大神啊 期末考试求帮助

 我来答
day忘不掉的痛
2015-01-20 · 知道合伙人数码行家
day忘不掉的痛
知道合伙人数码行家
采纳数:62646 获赞数:223940
本人担任公司网络部总经理多年,有充足的网络经验、互联网相关知识和资讯。

向TA提问 私信TA
展开全部
您好
int a[5][2] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
};
这句语句是定义一个5行2列的2维数组a,这里你可以理解为5个拥有"2个元素的数组"的集合

int* p = a[0];
整型指针指向2维数组的首元素的地址

int (*p2)[2] = &a[1];
定义p2是一个指向数组的指针,现在p2指向a[1],即指向5行2列数组的第二行的首元素的地址

对一个指针(也即地址)加1,会对原来的数组加上一个对应类型大小的数值
++p;
对p+1,所以p指向下一个元素

++p2;
因为p2是一个指向具有2个元素的数组的指针,所以对p2+1,就要加上2个sizof(int)的字节,即跳过2个元素

printf("%d", *p);
因为p一开始是指向数组的首元素的,执行了++p,后,指向了数组的下一个元素,即1,所以输出1

printf("%d", **p2);
因为p一指向5行2列数组的第二行的首元素的地址,执行了++p2,后,指向了5行2列数组的第三行的首元素的地址,因为一维数组有2个元素,跳过2个sizof(int)的字节后,就指向了下一行
而第3行的首元素的值是4,所以输出4

LZ如果有不明白的地方,可以追问
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式