问一道计算机等级考试C语言题目,求详解

2025-03-05 05:33:55
推荐回答(1个)
回答1:

#include
void main(void)
{
/*
address value

a[0] {1,2,3}

a[1] {4,5,6}

a[2] {7,8,9}

a[3] {10,11,12}

*/

int a[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12};

int *p[4], j; /* p[4] 是指针数据,它们的值都是地址 */
/*
address value

p[0],a[0] {1,2,3}

p[1],a[1] {4,5,6}

p[2],a[2] {7,8,9}

p[3],a[3] {10,11,12}

*/
for(j=0;j<4;j++) p[j]=a[j];
printf("%2d,%2d,%2d,%2d\n",*p[1],(*p)[1],p[3][2],*(p[3]+1));

/*
按以上表格解释

*p[1],[]运算符高于*, 所以p[1]的值是a[1]即{4,5,6}的首地址,*p[1]从其取出值为4

(*p)[1], ()运算符高于[],所以先做*p,它是a[0]即{1,2,3}的地址,(*p)[1]取值为2
p[3][2], p[3][2]对照上表,即12
*(p[3]+1), p[3]的值是a[3]即{10,11,12}的首地址,(p[3]+1)即{11,12}的首地址,*(p[3]+1]取值即为11

*/

}