请教关于指针的题目

来源:百度知道 编辑:UC知道 时间:2024/06/30 01:49:47
下面程序的输出结果是____。
#include <stdio.h>
char *pp[2][3]={ "abc", "defgh", "ijkl", "mnopqr", "stuvw", "xyz"};
main ( )
{
printf("%c\n",*(pp[1][2]+2)); /* ① */
printf("%s\n",**(pp+1)); /* ② */
}

① A) k B) o C) u D) z
② A) ijkl B) mnopqr C) stuvw D) xyz

请哪位高手帮我讲解下这道题,多谢了

PP[2][3]是一个指针数组,PP[1][2]的值就是字符串"xyz"的首地址,那么PP[1][2]+2就是字符'z'的地址,所以用*就是取存在这个地址里的值,输出格式也是%C,所以输出就为z。
pp是整个数据的首地址,由于pp是二维数组指针,所以pp+1就是第二行的首地址,就是"mnopqr"的地址的指针,就是指向这个指向字符串的地址的地址(不知道你能看明白不),所以需要两次取地址值,就是**(pp+1),所以就是mnopqr.

D
B

D B