现在的位置: 首页 > 综合 > 正文

林锐的《高质量编程》学习笔记——指针参数传递内存

2013年01月29日 ⁄ 综合 ⁄ 共 938字 ⁄ 字号 评论关闭

方法一:

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

int main()
{
	char *pointer = NULL;
	get_memory(&pointer, 13);
	strcpy(pointer, "hello, world!");
	printf(pointer);
	free(pointer);
	return 1;
}

方法二:

char * get_memory2(int num)
{
	char *p = (char *)malloc(sizeof(char) * num);
	return p;
}

*************************************************************************************************************

上面的两个方法是行之有效的方法,下面的方法可能通过编译,或是运行,但不是最合理的。

*************************************************************************************************************

方法三:

char * get_string_array(void)
{
	char p[] = "456789";
	return p; // 编译出警告,会导致返回的p指针,指向的是垃圾。// 原因参照作者的另外一篇《c指针学习》。因为"456789"是静态数据区的一个拷贝,当p消失后,//可能所指向的静态数据区的拷贝块,就成了垃圾。系统输出的是一个笑脸。(20120329日添加)
}
char * get_string_pointer(void)
{
	char *p = "123456";
	return p; // 编译不会出警告,但是逻辑上该代码设计有问题。
}

int main()
{
	char * p = NULL;
	p = get_string();
	printf(p);
	return 1;
}



上面代码的设计思路是错误的,因为get_string_pointer()方法中,常量字符串在静态存储区,它在程序生命周期中恒定不变。

无论什么时候调用该方法,它返回的只是个”只读“的内存块。


抱歉!评论已关闭.