关闭

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

1808人阅读 评论(0) 收藏 举报

方法一:

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

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


   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:250261次
    • 积分:2944
    • 等级:
    • 排名:第12444名
    • 原创:61篇
    • 转载:54篇
    • 译文:0篇
    • 评论:25条
    最新评论