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

指针参数是怎么传递内存的

2013-03-01 
指针参数是如何传递内存的如果函数的参数是一个指针的话,不要用它去申请动态内存!如下例子:并未达到预期的

指针参数是如何传递内存的

如果函数的参数是一个指针的话,不要用它去申请动态内存!

如下例子:并未达到预期的期望:

#include<stdio.h>void GetMemory(char *p,int num){p = (char *)malloc(sizeof(char)*num);}int main(void){char *str = NULL;GetMemory(str,100);//str 仍然为NULLstrcpy(str,"hello");return 0;}


GetMemory(char *p,int num)的执行过程:

编译器总是会为函数的每个形参制作临时副本,指针参数p的副本就是_p,编译器使_p = p;

函数体内对_p内容的修改就是对p内容的修改。因此指针既为输入参数又为输出参数。

在本例中_p申请了新的内存,只是把_p的内存地址改变了,但是p的内存地址未变!所以

 

 

解决办法有两个:

一是;用指向指针的指针去申请动态内存:

#include<stdio.h>//=====//执行过程:void GetMemory(char **p,int num){*p = (char *)malloc(sizeof(char)*num);}int main(void){char *str = NULL;GetMemory(&str,100);//
strcpy(str,"hello");return 0;}


最简单的就是利用return

#include<stdio.h>//=====char *GetMemory(void){char *p = "hello";return p;}int main(void){char *str = NULL;str = GetMemory();return 0;}


指针参数是怎么传递内存的

书本中说道:设计概念错误!

char *p = "hello";

"hello"是常量字符串  存储在静态存储区!在其生命周期内恒定不变!不可修改!

 

 

 

2楼Oimchuan昨天 15:21
解决办法呢???
1楼Oimchuan昨天 15:20
指向指针的指针!!!

热点排行