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

用函数的形参指针往申请内存

2013-06-26 
用函数的形参指针去申请内存#include stdio.h#include malloc.h#include string.hvoid GetMemory(ch

用函数的形参指针去申请内存

#include <stdio.h>
#include <malloc.h>
#include <string.h>

void GetMemory(char *p1,int num)
{
      p1=(char *)malloc(sizeof(char)*num);
}
void Test()
{
    char *str=NULL;
    GetMemory(str,100); //str仍然为NULL

    //printf("%x",str); //输出为0

    strcpy(str,"hello");  //运行时错误
}
int main()
{
      Test();
      return 0;
}

1.调用函数GetMemory()时,str和p1都指向了这个申请的内存地址;调用后,形参p1释放,那块内存还在,此时str不是指向了内存块地址吗?这里怎么理解,纠结老半天了?谢谢 指针 内存 malloc
[解决办法]
引用:
Quote: 引用:

内存是还在,但是没给str,str还是NULL,
p1不是str,所以对p1赋值,不影响str.
嗯 指针参数在申请内存 在中间发生了什么  能帮忙讲一下吗  谢谢

那个p1,他不是str,是一他的一份拷贝,相当于
p1=str,你对p1修改,肯定不会影响str.
[解决办法]
函数调用时是把实参(这里是str)的值赋给形参(p1),然后就和实参没有什么关系了,操作的完全是形参了,所以str得不到申请的空间地址。如果想要改变实参的值,可以通过传递其地址(这里也就是指针str的地址),然后再函数内容通过解引用这个地址来改变地址的值(str)

热点排行