函数传值还是传指的问题案例

来源:互联网 发布:ntfs for mac反激活 编辑:程序博客网 时间:2024/06/16 01:38

函数传值还是传指的问题案例

  • 要想改变它本身的值, 必须传入它本身的指针

向函数传参数时,一般而言,传入非const修饰的指针时,就表示,要在函数中修改这个指针的指向内存中的数据,如果是传值,那么无论在函数内部怎么修改这个值,也不会影响到传过来的值,因为传值可以看作只是内存拷贝。说起来有点基础的都懂,但是
请问下面的写法有什么问题

void GetVersion(char * pStr){    pStr = (char *)malloc(10);    strcpy(pStr,"V1.1.1");}int main(void){    char * ver = NULL;    GetVersion(ver);    printf("ver = %s\n",ver);    free(ver);}

问题是:

  • free的位置不对,会报错。
  • 不能实现GetVersion函数的想要的目的。

类似这样的问题是一个新手最容易犯的错误,程序中妄图通过函数
GetVersion 给指针 ver 分配空间,但这种方法根本没有什么作用,原因就是–这是
传值,不是传指针。你或许会和我争论,我分明传的时指针啊?再仔细看,其
实,==你传的是指针其实是在传值==。
正确的应该这么写

void GetVersion(char ** pStr){    *pStr = (char *)malloc(20);    strcpy(*pStr,"V1.0.1");}int main(void){    char * ver = NULL;      GetVersion(&ver);    printf("ver = %s\n",ver);    free(ver);}
0 0
原创粉丝点击