c语言两道题!谢~~

来源:百度知道 编辑:UC知道 时间:2024/06/01 20:33:50
1.设有定义语句:char *aa[2]={"abcd","ABCD"};
则叙述正确的是()
A aa数组的两个元素分别存放的是含有四个字符的一维数组的首地址
B aa数组的两个元素中各自存放了字符‘a’和‘A’的地址
2.一下程序运行后的输出结果是()
#include<stdio.h>
main()
{char *p[]={"BOOL","OPK","H","SP"};int i;
for(i=3;i>=0;i--,i--) printf("%c",*p[i]);printf("\n");
}
请朋友们帮我讲解一下
1.第一题中A和B选项的区别;
2.第二题中 printf("%c",*p[i]);中用*p[i]的含义。第二题中若用printf("%c",p[i]);结果如何,它俩的区别是什么?
非常感谢!

char *aa[2]={"abcd","ABCD"};是指针数组,存放的元素是指向字符串的的指针地址,所以有A哪种说法,虽然‘a’的地址和“abcd”地址是相同的,但从定义上不能那么说

第二题:
p是一个指针数组,p[i]表示p数组的元素即所存元素(字符串)的地址,*p[i]则是地址存储的内容,那个地址是字符串首地址,所以*p[i]既是字符串的首字母,若用printf("%c",p[i]);则输出地址值,那个在不同电脑上分配地址是不同的

1、aa是一个指针数组,存放的是2个指针,当然每个元素都指着一个字符串的地址,也就是"abcd" 和 "ABCD"的地址了。
2、*p[i]表示p[i]这个指针首地址指向的字母,也就是第一个字母;结果是SO,因为循环中2次i--,S完后就到O了;如果用p[i]会出现乱码,这是字符串的首地址,而用%c打印的话将是乱码。

char *aa[] 这种形式是定义的指针数组,也就是说数组元素为指针。
二题也是一样!

1.首先,你可以认为a[2]是一个存放指针的数组,每个指针是另外一个数组的首地址。所以选择A。一定要强调的是数组首地址,而不是一个字符的地址。
2.p[i]存放的是地址值,和第一题相似,所以获取地址里的数据,要用*p[i];
如果打印p[i],输出结果是一个内存地址