您的位置:控制工程论坛网论坛 » 嵌入式系统 » C语言指针使用总结

osmaosi

osmaosi   |   当前状态:在线

总积分:1122  2025年可用积分:0

注册时间: 2008-10-09

最后登录时间: 2022-04-26

空间 发短消息加为好友

C语言指针使用总结

osmaosi  发表于 2008/10/16 9:53:14      699 查看 0 回复  [上一主题]  [下一主题]

手机阅读

C语言指针使用总结

/********************************段错误**********************************/ /*#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); }
1楼 0 0 回复