C++ Primer Plus 第七章总结

C++ Primer Plus 第七章总结


1.不能返回数组,但可以将数组作为结构或对象的组成成分返回。
2.C++将数组名视为指针,视为其第一个元素的地址

e.g
int cookies[size];
cookies == &cookies[0];
int sum_arr(int *arr, int n) //数组作为参数传入

数组表示法( int arr[] ),arr 不仅指向 int ,还指向 int 数组的第一个 int
所以指针作为函数参数时,有两种用法:

 ①指针指向数组的第一个元素时,使用数组表示法
 ②指向一个独立的值时,使用指针指示法

3.声明形参(防止数据被修改)使用const(详细见第三章)

4.模块化程序:

自下而上:
组件—>整体  适合OOP (通过数据类型和设计合适的函数)
自上而下:
过程性编程 指定模块化设计方案,再研究细节

5.程序清单7.8中可以使用如下的方法使用数组

int sum_arr(const int *begin , int *end)
{
	const int *pt;
	...
	for(pt = begin; pt != end; pt++){
		...
	}
}

const int 和 int const 的区别

int age = 39;
const int *pt =  &age;
int sage = 80;
pt = &sage;
//只能防止修改pt指向的值,但可以修改pt本身(使其指向其他值)即赋予新地址
//使用const的方式使得无法修改指针的值
int soth = 3;
const int *ps = &soth; //a pointer to const int
int *const finger = &soth; //a const pointer to int
//finger 和 *ps 都是const, 而*finger 和 ps 不是
//const 对象的const 指针
double trouble = 2.0E30;
const double *const stick = &trouble;
//stick 和 *stick 都是cosnt,stick只能指向trouble,而stick 不能用来修改trouble的值

6.指针和const

	① int age = 38;
	  const int *pt = &age; //pt 指向age
	  pt 指向一个const int ,不能使用pt来修改这个值
	  *pt 的值为const不能被修改,而age不是const,可以直接通过age变量来修改age
	② C++禁止const的地址赋给非const的指针;
	  e.g.
	  const float g_earth = 9.8;
	  const float *pe = &g_earth; //合法
	  
	  const float g_moon = 11.3;
	  float *pm = &g_moom; //非法
	③ 指针指向指针
      两级间接关系

7.二维数组可以参考P187

arr[M][N];
//M可以省略但是N必须存在,以便编译器确定移动内存的间距(from 《程序员面试白皮书》)
e.g ar2[][4]
//实质:传入仍为指针地址

8.字符串与常规数组之间的一个重要区别是,字符串有内置的结束字符(包含字符,但不以空字符结尾的char只是数组,而不是字符串)(可以使用‘\0’判断字符串是否结束)

9.创建包含n个字符的字符串,需能够存储n+1个字符的空间;

//e.g
char *buildstr(char c, int n)
{
	char *pstr = new char[n+1];
	pstr[n] = '\0';
	while(n-- > 0)
		pstr[n] = c;
	return pstr;
}
//main 
char *ps = buildstr(ch,times);
delete ps;

10.函数也可以返回结构,与数组名第一个元素的地址不同的是,结构名只是结构的名称,要获得结构的地址,必须使用地址操作符 &
(缺点:传入结构过大将增加内存要求)
C++按引用传递

11.传递结构的地址

调用函数是,将结构的地址(&pplace)而不是结构本身(pplace)传递给它;
将形参声明为指向polar(结构体名称)的指针,即 polar* (指针)型。由于函数不应该修改结构,
因此便用const修饰符
由于形参是指针而非结构,因此使用间接成员操作符(->)而非成员操作符(.)
//e.g
void show_polar(const polar *pda)
调用 show_polar(&pplace); //pass address

12.函数指针:函数的地址是存储其机器语言代码的内存的开始地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值