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

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

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

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

#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 仍然为NULL
	strcpy(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
指向指针的指针!!!