注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[C/C++笔记]在函数中传递指针  

2011-10-24 23:35:33|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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


void GetMemory(char *p,int num)
{
    p=(char *)malloc(num*sizeof(num));
}

int main()
{
    char *str=NULL; //将指针初始化为NULL
    str=GetMemory(str,10);
    strcpy(str,"hello");
    printf("str is %s\n",str);
    free(str);
    str=NULL; //将指针置空
    return 0;
}

/*
在运行到主函数的strcpy(str,"hello")语句的时候发生错误,这时候观察str的值,发现仍然为NULL。也就是说str本身并没有改变,我们malloc的内存的地址并没有赋值给str,而是赋值给了_str。而这个_str是编译器自动编译和回收的,我们根本无法使用。所以像这样获取一块内存是不行的。
*/

char *GetMemory(char *p,int num)
{
    p=(char *)malloc(num*sizeof(int));
    return p; //return返回的指针所指向的内存必须是全局的或是malloc分配的,不能是在函数中的栈上分配。
}

int main()
{
    char *str=NULL; //将指针初始化为NULL
    str=GetMemory(str,10);
    strcpy(str,"hello");
    printf("str is %s\n",str);
    free(str);
    str=NULL; //将指针置空
    return 0;
}


void GetMemory(char **p,int num)
{
    *p=(char *)malloc(num*sizeof(int));
    return p;
}

int main()
{
    char *str=NULL; //将指针初始化为NULL
    GetMemory(&str,10);
    strcpy(str,"hello");
    printf("str is %s\n",str);
    free(str);
    str=NULL; //将指针置空
    return 0;
}

/*
注意这里的参数是&str而非str。这样的话传递过去的是str的地址,是一个值。在函数内部,用钥匙("*")来开锁:*(&str),其值就是str。所以malloc分配的内存地址是真正赋值给了str本身。
*/

  评论这张
 
阅读(1425)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017