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

原创 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++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字与C 语言的不同。假设...
  • zhaojinjia
  • zhaojinjia
  • 2013年09月20日 11:06
  • 2316

林锐-高质量c/c++编程指南

返回主页高质量C++/C编程指南文件状态[ ] 草稿文件[√] 正式文件[ ] 更改正式文件 文件标识: 当前版本: 1.0作 者: 林锐 博士完成日期: 2001年7月24日版 本 历 史版本/状态...
  • autoair
  • autoair
  • 2005年11月20日 13:30
  • 5760

《高质量程序设计指南:C++/C语言》 林锐

一、C++ 文件结构 C++/C 程序的头文件以“.h”为后缀,C 程序的定义文件以“. c”为后缀,C++程序 的定义文件通常以“.cpp”为后缀 (1)、头文件结构(*.h): 头文件...
  • cdl2008sky
  • cdl2008sky
  • 2014年04月15日 10:29
  • 1410

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

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

《高质量程序设计指南---C++/C语言》 林锐、韩永泉

如果没有记错的话, 我应该是2012年买该书的, 夏天。 那个时候, 我想继续补一下自己的C/C++知识和功底, 也为笔试面试做一些准备。 买了该书之后, 有种如获至宝的感觉, 被林锐...
  • stpeace
  • stpeace
  • 2015年04月27日 21:59
  • 4175

林锐C++/C高质量编程附录答案(-)

附录C :C++/C 试题的答案与评分标准一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分)请写出 BOOL flag 与“零值”比较的 if 语句。(3 分)...
  • wss71104307
  • wss71104307
  • 2007年05月28日 21:52
  • 1094

林锐高质量c编程阅读心得

要指明函数返回值类型,如果没有返回值,也应该注明。函数名字和返回值类型不可冲突,正常返回和错误返回,在编写程序的过程中,要严格区分开。如果函数的返回值是一个对象,有些场合用“引用传递”替换“值传递”可...
  • qq_33595823
  • qq_33595823
  • 2016年09月17日 22:59
  • 225

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

1. 不可以将布尔变量直接和TRUE、FALSE、1、0进行比较。应该用if(flag)或者if(!flag)。     整型变量直接用”==“或者”!=“与0进行比较。 浮点变量不可以直接用”=...
  • axiaochong
  • axiaochong
  • 2013年09月22日 20:54
  • 1677

关于林锐内存思考

首先声明:以下部分内容出自http://blog.csdn.net/mr_chenping/article/details/8735854      林锐内存思考的题目在有关C语言的笔试题中也是...
  • u013993293
  • u013993293
  • 2015年10月04日 12:56
  • 1210

高质量C++编程(林锐)

 第 1 章 文件结构 每个 C++/C 程序通常分为两个文件。一个文件用于保存程序的声明( declaration ),称为头文件。另一个文件用于保存程序的实现( implementation ),...
  • hjzwl1018
  • hjzwl1018
  • 2007年11月04日 22:01
  • 2069
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:林锐的《高质量编程》学习笔记——指针参数传递内存
举报原因:
原因补充:

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