int a[4][3] = { 1,2,3,4,5,6,7,8.9,10,11,12 };
int(*pt)[3] = a;
cout << (*(pt + 1)[2]) << endl;
return 0;
本人是小白,刚刚开通博客,所以没办法给大家悬赏c币,请大家见谅,想问一下这个结果为什么是11.
int a[4][3] = { 1,2,3,4,5,6,7,8.9,10,11,12 };
int(*pt)[3] = a;
cout << (*(pt + 1)[2]) << endl;
return 0;
本人是小白,刚刚开通博客,所以没办法给大家悬赏c币,请大家见谅,想问一下这个结果为什么是11.
很有欺骗性的题目,应该是8,9
不是8.9 标点符号错误了。
修改后正确的答案应该是10
1 2 3 //第0行
4 5 6
7 8 9
10 11 12 //第3行
首先pt 是行指针 ( 之前有个您问的问题,可以结合理解)
解释一下(pt + 1)[2], pt+1指向第一行,[]运算符优先级大于* , (pt + 1)[2] = (pt+0)[3] = pt[3],即指向第三行行首。
这种写法对初学者不友好,不提倡。
然后 *(pt + 1)[2] 等同于 * ( pt[3] + 0 ) ,即取第三行第0列的元素,答案是10
一种好理解的写法如下:
int main()
{
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, (*p)[4], i, j;
p = a;
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
printf("%d ", *(*(p + i) + j));
return 0;
}
如果对您有帮助,请点击采纳答案好吗,谢谢~~