首页 > 试题广场 >

有以下程序段 char a[2][2] = {{'a','b

[单选题]
有以下程序段
char a[2][2] = {{'a','b'},{'c','d'}};
char (*p)[2] = a;
cout<<*(*(p+1));
p++;
cout<<*(*p+1)<<endl;


请选择程序的运行结果(      )
  • bd
  • ac
  • ab
  • cd
p表示指向a数组第0行的指针
p+1表示指向a数组第1行的指针
*(*(p+1)) 即a数组的第一行第0个元素
p++后,p表示指向a数组第一行的指针
*p表示指向a数组第一行第0个元素的指针,
*p+1表示指向a数组第一行第1个元素的指针,
*(*p+1)表示指向a数组第一行第1个元素
发表于 2019-09-07 12:56:29 回复(4)
p是一个指向含有两个元素的数组指针,由于指向了二维数组a,相当于p的第一个元素是数组{'a','b'}第二个元素是数组{'c','d'}, 对于*(*(p+1)),先分析p+1,p指向的是第一个元素,p+1就指向了第二个元素,也就是数组{'c','d'},*(p+1)对p+1解引用/取值,返回的是第二个元素的内容,也就是字符c的地址,*(*(p+1))再对字符c的地址解引用/取值,得到字符c。 然后p++,此时p应该指向第二个元素数组{'c','d'},对于*(*p+1),*p是数组{'c','d'}的首地址也就是字符c的地址,*p+1则是指向了字符d的地址,再对*p+1解引用/取值,*(*p+1)就是字符d了。
发表于 2020-11-26 01:04:50 回复(0)
看半天发现忘记p++了,一度认为这道题没有正确答案
发表于 2023-10-26 19:04:28 回复(0)
a的类型是char (*)[2],而&a的类型是char (*)[2][2]
cout<<*(*(p+1))
所以p是指向a数组第零行的指针,p+1是指向下一个数组即第一行的指针,*(p+1)是指向第一行第零个元素的的指针,*(*(p+1))是第一行第零个元素,即c;
p++;
cout<<*(*p+1)<<endl;
p++与p+1相同都是指向下一个数组即第一行的指针,*p表示指向第一行第零个元素的指针,*p+1表示指向第一行第一个元素的指针,*(*p+1)表示第一行第一个元素,即d。


发表于 2022-11-09 15:21:18 回复(0)
二维数组指针 P是指针变量 char * [2]是类型 可以看成p=a
发表于 2023-09-28 16:54:48 回复(0)