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

原创 2012年03月28日 17:08:19

方法一:

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

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


                    

相关文章推荐

高质量C++编程指南学习笔记3-4章---thanks to林锐

第三章     命名规则 命名规则应该是给变量、函数和类的命名规则。耳闻过“匈牙利”命名规则。其主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。如所有字符变量都以’ch’为前缀。若一个变...
  • mwj_88
  • mwj_88
  • 2013年01月30日 17:40
  • 648

高质量C++编程指南学习笔记第8章---thanks to林锐

第八章     C++函数的高级特性 对比C语言的函数,C++增加了重载、内联、const和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const与virt...
  • mwj_88
  • mwj_88
  • 2013年02月18日 11:04
  • 532

高质量C++编程指南学习笔记第9章---thanks to林锐

第九章     类的构造函数、析构函数与赋值函数 类对象之间的赋值只是对数据成员赋值。 每个类只有一个析构函数和一个赋值函数,但可有多个构造函数(包含一个拷贝构造函数,其他的称为普通构造函数)...
  • mwj_88
  • mwj_88
  • 2013年02月19日 10:22
  • 544

高质量C++编程指南学习笔记第11章---thanks to林锐

第十一章     其他编程经验 11、1利用const提高函数的健壮性          const更大的魅力是它可修饰函数的参数、返回值、甚至函数的定义体。 11.1.1用const修饰函数的...
  • mwj_88
  • mwj_88
  • 2013年02月21日 10:42
  • 625

《高质量C++/C编程指南(林锐)》学习笔记

1. 不可以将布尔变量直接和TRUE、FALSE、1、0进行比较。应该用if(flag)或者if(!flag)。     整型变量直接用”==“或者”!=“与0进行比较。 浮点变量不可以直接用”=...

c/c++高质量编程(林锐)读书笔记二

1.2 头文件的结构 头文件由三部分内容组成: (1)头文件开头处的版权和版本声明(参见示例1-1)。 (2)预处理块。 (3)函数和类结构声明等。 假设头文件名称为graphics.h,头...

《高质量C++/C编程指南》笔记——内存管理[3, 指针与数组的对比]

7.3 指针与数组的对比 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组明对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针可以随时指向任意...

C/C++ 笔试题目——林锐博士《高质量C++/C编程指南》

本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。   许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都...

《林锐-高质量C/C++编程指南》笔记

1.if语句规则 1.1 不可将布尔变量直接与TRUE、 FALSE 或者1、 0 进行比较。 根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE 的值...

c/c++高质量编程(林锐)笔记一

【规则6-3-2】在函数体的“出口处”,对return语句的正确性和效率进行检查。      如果函数有返回值,那么函数的“出口处”是return语句。我们不要轻视return语句。如果return...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:林锐的《高质量编程》学习笔记——指针参数传递内存
举报原因:
原因补充:

(最多只允许输入30个字)