选择题

有以下程序

#include
#include
void fun(int **s, int x[2][3])
{
   **s =*(x[1]+1);
}
void main()
{
   int a[2][3]={1,2,3,4,5,6},*p;
   p=(int *)malloc(sizeof(int));
   fun(&p,a);
   printf("%d\n",*p);
}

程序的运行结果是(     )。

【正确答案】 A
【答案解析】

malloc()函数的返回值是新分配的存储区的首地址, 将该地址赋值给 p 指针, 然后取 p 指针的地址,调用 fun 函数。 fun 函数中对指向指针的指针 s 指向的内存单元赋值, 其中 x[1]表示二维数组 x 的第二行的行地址, x[1]+1 表示二维数组 x 的第二行第二列的地址, 所以 fun 函数的功能是将二维数组 x 的第二行第二列的值,即 x[1][1]赋值给**s, *s 为 p, 所以**s 代表*p, *p 即为 a[1][1], 答案选择 A 选项。