[讨论] C语言指针使用总结

cqwjfb   2007-12-30 15:30 楼主
/********************************段错误**********************************/ /*#include <stdio.h> void getmem(char *p) { p=(char *)malloc(100); } int main() { char *str =NULL; getmem(str); strcpy(str ,"hello word"); printf ("\n%s\n",str); }*/ 解释:函数参数传递是值传递,函数调用时首先创建实参的副本赋给形参 具体过程如下: 图一 /**********************************乱码*******************************/ /*#include <stdio.h> char * getmem(void) { char p[]="hello word"; return p; } int main() { char *str =NULL; str=getmem(); printf ("\n%s\n",str); }*/ 解释:函数内在栈中开辟的内存空间 在函数执行结束时会被释放掉但内容不变,上面的数据P已经被释放掉了,所以STR根本的数组的地址,而得到一个垃圾值打印出乱码。 /************************************正确*************************************/ /*#include <stdio.h> char * getmem(void) { char *p="hello word"; return p; } int main() { char *str =NULL; str=getmem(); printf ("\n%s\n",str); }*/ 解释:函数内在堆中分配内存不释放; /*******************打印正确 但内存不释放***********************************/ /*#include <stdio.h> void getmem(char **p ,int num) { *p=(char*)malloc(num); } int main() { char *str =NULL; getmem(&str,100); strcpy(str ,"hello word"); printf ("\n%s\n",str); }*/ 解释:图二 /*******************************打印正确***********************************/ #include <stdio.h> int main() { char *str =(char *)malloc(100); strcpy(str ,"hello word"); printf ("\n%s\n",str); free(str); }
  • jpg
  • jpg

回复评论 (8)

回复:C语言指针使用总结

不错,比较经典
点赞  2008-1-4 09:18

回复:C语言指针使用总结

不错 谢谢哈!
点赞  2008-1-4 15:51

回复:C语言指针使用总结

看看,谢谢!
点赞  2008-1-15 12:40

回复:C语言指针使用总结

3q!:D
点赞  2008-1-15 14:55

回复:C语言指针使用总结

3q!!
点赞  2008-1-17 09:02

Re: C语言指针使用总结

lou zhu shou lei,
du  zhe zhou hui.
lun tan xing  wang,
shou ru wang qian.
点赞  2008-11-27 20:04
就是弄不明白指针问题 晕啊
点赞  2009-5-9 14:25
好文,强顶,C的好多细节,还是比较令人头痛的
点赞  2009-5-10 16:42
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复