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

方法一:

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()方法中,常量字符串在静态存储区,它在程序生命周期中恒定不变。

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


            
阅读更多
文章标签: 编程 string 存储 c
个人分类: c/c++
上一篇林锐的《高质量编程》学习笔记——内存分配方式
下一篇CMD的debug命令
想对作者说点什么? 我来说一句

林锐高质量C/C++编程

2010年03月02日 729KB 下载

林锐-高质量C编程

2011年09月09日 275KB 下载

高质量C编程(命名规范)-林锐

2011年05月10日 490KB 下载

高质量C++编程指南 - 林锐

2008年01月28日 658KB 下载

高质量C++编程 林锐博士

2008年12月28日 131KB 下载

没有更多推荐了,返回首页

关闭
关闭