《C++必知必会》读书笔记1

指针和引用的区别:

1)不存在空引用

2)所有的引用都需要初始化

3)一个引用始终指向对他初始化的那个对象

数组作为参数的时候,会退化为指针。同样的例子也发生在函数上。一个函数型参数会退化为一个函数指针。

由于数组形参中数组的边界被忽略了,所以在声明的时候最好将其忽略。然而如果函数期望接受一个指向一个元素序列的指针作为参数的时候,而不是接受单个的指针,那么最好采用如下的申明:

void function(int array[]);

另外如果数组的边界的精确值非常的重要的话,那么可以限制函数只接受特定数量的元素的数组,我们在这种情况下可以考虑采用引用形参:

void function(int (&array)[12] );

现在函数就只能接受大小为12的整形数组了。

模板将有助于代码的泛化:

template<int n>
void function(int (&array)[n] ); //让编译器帮助我们推导n的值

当然你也可以采用传统的方法:

void function(int array[], int size);

我们其实也可以将上面的结合起来:

template<int n>
inline void function(int (&array)[n] ){
	function_1(array,n);
}

比如:

对于多维数组作为形参而言,形参是一个指向数组的指针,比如我们可以采用:

void function(int (*arr)[20]); //一个指针,指向具有20个元素的的数组

可能下面的方式更加的清晰:

void function(int arr[][20]);

注意对于多维数组,下面的声明是错误的:

int[3][3] arr1={0};

而应该采用下面的方式:

int arr2[3][3];
int arr[3][3]={1,2,3,4,5,6,7,8,9};

int arr[][3]={1,2,3,4,5,6,7,8,9};  //注意,第二个参数不能省略。

指向指针的指针

比如下面的代码:

//将一个指针移动到指向字符串的下一个字符
void function(const char **pstr, char ch){
	while(**pstr && (**pstr)!= ch){
		++(*pstr);
	}
}

这个在c中是合理的,但是在c++中,我们更加习惯使用指向指针的引用。比如:

//将一个指针移动到指向字符串的下一个字符
void function(const char *&pstr, char ch){
	while(*pstr && (*pstr)!= ch){
		++(pstr);
	}
}

一个常见的误解就是适用于指针的转换同样适用于指向指针的指针,但是事实并不是如此的,比下面的代码:

class A{

};

class B : public A{

};

int _tmain(int argc, _TCHAR* argv[])
{
	B * b=new B;
	A * a=b;  //OK.

	B** b1= &b;
	A **a1=b1;  //Error

	return 0;
}

涉及到const的时候,也有这方面的问题:

我们知道,将一个非常量的指针转换为指向常量的指针是合法的,但是,请看代码:

int * p1=NULL;
	const int *p2=p1;  //OK

	int * a[100]; //int **
	const int **p3=a; //ERROR
	return 0;
时间: 2024-07-31 14:06:23

《C++必知必会》读书笔记1的相关文章

MYSQL必知必会读书笔记第十和十一章之使用函数处理数据_Mysql

 mysql简介 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 拼接字段 存储在数据库表中的数据一般不是应用程序所需要的格式.我们需要直接从数据库中检索出转换.计算或格式化过的数据:而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化. 计算字段(字段 = 列,不过数据库列一般称为列,而字段通常用于计算字段中)并不实际存在于数据库表中,计算字段是运行时在select语句内创建的

MYSQL必知必会读书笔记第二章之版本更改_Mysql

MySQL的当前版本为版本5,以下列出最近版本的主要更改: 4.---------InnoDB引擎,增加了事务处理.并.改进全文搜索等支持. 4.1--------对函数库.子查询.集成帮助等重要增加. 5.-------------增加了存储过程.触发器.游标.视图等 以上内容是小编给大家介绍MYSQL必知必会读书笔记的相关知识,希望对大家有所帮助!

MYSQL必知必会读书笔记第三章之显示数据库_Mysql

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. show column from tablename: 对每一个字段返回一行,行中包含字段名,数据类型.是否允许NULL.键信息.默认值以及其他信息. describe 语句: MySQL支持使用describ作为show columns from 的一种快捷方式.describ tablename 所支持的其他的show语句: show s

MYSQL必知必会读书笔记第六章之过滤数据_Mysql

mysql简介 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. where子句的位置,在同时使用ORDER BY 和WHERE子句时应该让ORDER BY 位于where之后,否则会产生错误. 1.不匹配检查 复制代码 代码如下: SELECT vend_id FROM products where vend_id <>1003 等同于 复制代码 代码如下: SELECT vend_id

MYSQL必知必会读书笔记第四章之检索数据_Mysql

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显示的数据会与其他的地方顺序不同.出现这种情况很正常.如果没有明确排序查询结果.则返回的数据没有特殊意义.返回数据的顺序可能是是数据被添加到表中的顺序,也可能不是.只要返回相同数目的行,就是正常. 注意:SQL语句和大小写 请注意,SQL语句不区分大小写,因此select和SELECT是相同的.同样,

Python 程序员必知必会的开发者工具

Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作.同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中.本文将介绍Python程序员必知必会的开发者工具. 对于开发者来说,最实用的帮助莫过于帮助他们编写代码文档了.pydoc模块可以根据源代码中的docstrings为任何可导入模块生成格式良好的文档.Python包含了两个测试框架来自动测试代码以及验证代码的正确性:1)doctest模块,该模块可

《Oracle PL/SQL必知必会》——第2章 初识Oracle和PL/SQL 2.1 什么是Oracle

第2章 初识Oracle和PL/SQL Oracle PL/SQL必知必会 在本章中,你将认识Oracle和PL/SQL是什么,以及你可以使用什么工具来操作它们. 2.1 什么是Oracle 在前一章中,你学习了数据库和SQL.如所解释的那样,做所有工作(存储.检索.管理和操作数据)的实际上是数据库软件(DBMS或数据库管理系统[Database Management System]).Oracle DBMS(或者简称为Oracle)就是一个DBMS:也就是说,它是数据库软件. Oracle已经

Visual Studio 使用及调试必知必会

原文:Visual Studio 使用及调试必知必会   一:C# CODING 技巧 1:TODO 然后 CTRL + W + T,打开任务列表,选中 Comments,就会显示所有待做的任务 2:打开所在的文件夹 右键单击任何一个文件选项卡, 选择"打开所在的文件夹",或在 Solution Explorer 的文件上面点右键: 3:比对同一个文件 鼠标向下拖动红框内的图标. 4:按意愿编程 我把它定义为:按意愿编程,即,在写代码过程中,如果觉得需要使用到一个新类,可以先不用创建这

《Oracle PL/SQL必知必会》导读

前言 Oracle PL/SQL必知必会 Oracle Database(或Oracle RDBMS)是如此流行并且获得了广泛的认可,以至于大多数用户将其简称为"Oracle"(忽略了Oracle公司制作其他软件甚至硬件的事实).Oracle Database(我将像大多数人那样将其简称为"Oracle",以使事情变得简单)从20世纪70年代起就出现了,成为最早的数据库管理系统之一.Oracle是世界上最常用的数据库管理系统(Database Management

【web必知必会】——图解HTTP(上)

原文:[web必知必会]--图解HTTP(上) 本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化.管道化.多部分对象集合.范围请求等 后续会更新http其他的相关知识. 关键词概念 平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? 先看看官方的解释: URL:uniform resource l