第1个回答 2013-03-16
首先pstr是一个静态的字符型的指针变量,它被赋了一个初值,也就是"hello"在内存中的地址
然后主函数里定义了一个指针p,被置为空,并且把它的地址作为参数传递进fun函数
注意fun函数的形参类型是指向指针的指针,所以fun函数里的*p=pstr就相当于在main函数里写上p=pstr,因此p就相当于字符串"hello"的首地址,所以
printf("%s\n", p);可以打出hello
如果你改成
printf("%c\n", *p);那么应该可以打出h本回答被提问者和网友采纳
第2个回答 2013-03-17
#include<stdio.h>
static char *pstr="hello"; /*把字符串首个字符的地址赋给pstr,pstr为指针类型*/
void fun(char **p)
{
*p=pstr;
}
void main()
{
char *p=NULL; /*防止野指针的危害,放在0地址出保安全*/
fun(&p); /*把指针变量p的地址传给二级指针形参p,在形参中执行\
*p=pstr后返回,返回形参释放的只是变量的值,但地址\
不变,此时主函数中的p已变为 “hello”的首个字符的\
的地址,和pstr相同。调用此函数的目的是间接改变p*/
printf("%s\n",p);
}
第3个回答 2013-03-16
很常用的为指针赋值的方法,如果你读过一些关于dx的代码,你会很频繁的遇到类似于
void fun(cha**p) {
*p=pstr; // 指针p指向全局变量pstr所指向的地址.
}
的代码。
第4个回答 2013-03-18
fun 的行参是二维指针 main函数中实参为&p也是二维指针, fun中*p是一维指针。 相当于 *(&p)= pstr,
也就是p = pstr