首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问一段代码!

2012-09-28 
请教一段代码!!!C/C++ codevoid GetMemory(char *p){p(char *)malloc(100)}void Test(void){char *strN

请教一段代码!!!

C/C++ code
void GetMemory(char *p){        p=(char *)malloc(100);}void Test(void){    char *str=NULL;    GetMemory(str);    strcpy(str,"hello world\n");    printf(str);}

像上面这样运行Test会有错误。
而如果是下面这样运行Test2则正确:
C/C++ code
void GetMemory2(char **p,int num){    *p=(char *)malloc(num);}void Test2(void){    char *str=NULL;    GetMemory2(&str,100);    strcpy(str,"hello world!\n");    printf(str);}

指针作为参数是可以改变实参的吗?为什么第一个不可以?第二个就可以呢?求解释

[解决办法]
第一个是把指针str的值传给了形参p,函数只给p开辟了空间而没有给str开辟空间,而第二个是把指针str的地址传给了p,所以给str开辟了空间
[解决办法]
因为指针作为形参传进函数的时候,函数会另外开辟一个空间来保存这个值
而这个值的地址和你传进来的参数的地址是不一样的
所以你在第一个函数里面直接用这个变量保存malloc返回的指针
那么就是说这个malloc的空间仅仅是保存在了函数自动开辟的空间的那个值里面
而没有真正改变到原来传入的参数里面去

热点排行