急求一道数组和指针题目,请高手指教,万分感谢!

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:11:31
#include "stdio.h"
void fun(char **p)
{
++p;
printf("%s\n",*p);

}
main()
{
char *a[]={"Morning","Afternoon","Evening","Night"};
fun(a);
}
A:Afternoon B:afternoon
c:Morning D:morning
(这里面的fun我不知道什么意思。只里面的运算有的弄不懂,望高手指教,讲的详细些,谢谢!)

首先,你得搞清楚char* a[]的概念,它是一个字符指针数组。这个数组的元素储存的是一个指针,即一个地址。
fun()函数中p指向了a //p=a;
此时做 ++p; 操作时就是将p指向下一个地址。数组的内存分配空间是连续的,也就是指向了第二个元素。
在输出*p是即为输出第二个元素了。

至于printf()中为什么用*p,可看一下下面的程序。
char *b = "Morning";
printf("%s",b); //这里用b而不是*b,相当于你程序中的*p

此处的*b就是你的程序中的*a[]中的一个元素了。
现在能明白了吗?

++p;//地址加1
printf("%s\n",*p);//打印地址中的字符串

这里的fun应该是你定义的一个函数名叫fun,main才是主函数,这是一个最简单的数组指针