跪求C++大神啊 期末考试求帮助
1个回答
2015-01-20 · 知道合伙人数码行家
关注
展开全部
您好
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如果有不明白的地方,可以追问
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如果有不明白的地方,可以追问
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询