C++基础总结(C++ Primer 回顾)

变量和基本类型

基本内置类型:

 整型

  • 整数:  
int一个机器字长
short半个机器字长
long一个(32位)或两个机器字长
注:int、short、long默认是带符号的,通过unsigned指定类型为无符号的
  • 字符:
char单个机器字节
wchar_t用于扩展字符集
注:有无符号型(unsigned,0-255)和有符号型(signed,-128 - 127)两种

  • 布尔型:
bool真值true和false

浮点型

  • 单精度浮点数:
float 一个机器字长

  • 双精度浮点数
double两个机器字长

  • 扩展双精度浮点数

long double三个或四个机器字长

Tips:
1.  整型运算时很少使用short。而大多数机器上,int进行整型运算不会出错。选择long比int类型能表示的精度高(32位机器上int与long都是32位),但是运行代价大。具体应用时应视情况而定;
2.  浮点型运算时使用double类型基本不会有错,而且其运行代价也与float相当,有些机器上double类型反而快一些;
3.  无符号整型的对象永远不可能保存负数,但是把负数复制给unsigned对象在C++中完全合法,其结果是负数对该类型的取值个数求模后的值。超出unsigned对象取值范围的赋值,编译器都会自动将该值对(unsigned对象的取值个数)取模。如:336 存储到8位的unsigned char 中,实际赋值为80;-1存储的实际赋值为255

字面值常量:

20十进制整型常量(默认为int或long类型
024八进制(0开头)
0x24

十六进制(0x开头)

3.14159 double类型(默认为double类型
true、falsebool型字面值
‘a’字符字面值
L'a'宽字符字面值
\n 或 \12换行符
\r回车符
\40空格符
\0空字符
"A"字符串字面值(会在末尾自动添加一个空字符\0)
\多行字面值(用于断开过长的行,在下一行继续处理,不允许其后有注释或者空格)

变量:

命名习惯:一般用小写,包含多个单词时之间添加下划线
变量的声明、定义、初始化:
定义:有且仅有一个定义,为变量分配存储空间,可以在定义时为变量赋值,建议在变量使用出定义变量
声明:向程序表明变量的类型和名字,可以通过(extern 类型 变量名)声明一个变量而不去定义
初始化:内置类型变量,在函数体外定义时自动初始化为0,函数体内定义不进行自动初始化。建议:内置类型的对象定义时都要初始化
const限定符:
定义一个变量,加上const限定符,表示把一个对象转化成一个常量(不可修改),即定义一个不可修改的常变量
const常变量定义以后就不能修改,所以定义时必须初始化
全局变量中的非const变量默认为intern,可以在其他文件中声明并使用;而const变量默认为非extern,只能在定义该变量的文件中全局使用,必须显示地声明为extern const 类型 变量名 才能在其他文件中使用
引用:
其绑定的对象的别名,在定义引用时必须用与其同类型的对象初始化。此时对引用的操作即对原对象的操作;
初始化时引用的对象一旦绑定就不能再更改;
不能定义引用的引用
const引用是指指向const对象的引用。非const引用不能绑定到const对象
非const引用只能绑定到同类型的对象,而const引用可以绑定到不同类型的对象或者右值(常量)
typedef:
定义类型的别名(隐藏对象的类型,便于理解,增强代码的可读性)

类类型:
class与struct定义:
都可以用来定义类类型,唯一的区别是默认访问级别:默认情况下,struct的成员为public,class的成员为private
头文件定义及声明:
一般包含类的 定义、extern变量的声明和函数的声明。只用于声明不用于定义
头文件可以定义类、const对象、inline函数。const变量放在头文件中后,每个包含头文件的源文件都有了自己的const变量,且其值和名称都一样。
头文件中的const变量必须是用常量表达式初始化,否则不应该在头文件中定义
避免多重包含:如一个头文件中#include了string库,源文件中也#include了string库,在源文件包含头文件时将两次包含string库,此时可以使用头文件保护符来避免在已经见到该头文件的情况下重新处理该头文件:
#ifndef HEADERFILE_H
#define HEADERFILE_H
// define class,declare var,inline function
#endif
头文件中不要放置using 命名空间声明,否则所有包含该头文件的源文件都必须含有相同的命名空间声明,不推荐

数组和指针

现代C++程序推荐使用STL中的vector、迭代器代替数组与指针操作,只有在强调速度时,才在类实现的内部使用数组和指针。
数组:
定义:类型 数组名 维数
数组维数:必须用值大于等于1的常量表达式初始化(整型字面值常量、枚举常量、用常量表达式初始化的const整型对象)
显示初始化数组:int ia[array_size]={1,2,3,4}
特殊的字符数组:char ca[] = "C++"
不允许数组的直接复制和赋值
访问数组元素:下标操作
for (size_t ix = 0; ix != array_size; ++ix)
ia[ix] = ix
指针:
指针指向对象,保存一个对象的地址
string s("C++");
string *sp = &s; // *操作符表示sp是一个指针变量,&是取地址操作符
指针的定义和初始化:string *sp1, *sp2
指针的可能取值:一定要避免使用未初始化的指针
0值常量表达式(表明不指向任何对象)或NULL
类型匹配的对象地址
另一个对象之后的下一个地址
同一类型的另一个有效指针
void* 指针:可以保存任何类型的对象的地址。其操作仅限于:向函数传递void* 指针、从函数返回void*指针、给另一个void*指针赋值。不允许void*指针操作其所指向的对象
指针操作:
count << *sp; //返回其所指对象的值
*sp = "goodbye" // 修改对象的值
sp = &s2; //指向另外一个新对象
指向指针的指针:int **ppi = &pi
使用指针访问数组元素:
int ia[] = {1,2,3,4,5};
int *ip = ia; //此时ip指向数组的首地址,即数组第一个元素的地址ia[0]
ip = &ia[4]  或 ip = ip + 4  //ip指向数组的ia[4]
p[1] 等价于 *(p+1)
指针和const限定符:
指向const对象的指针:本身不是const指针,而是标志着指向const对象。这样的指针也可以指向非const对象。但是均不能通过指针修改对象的值。可以给该指针重新赋值,指向新的对象:
const int ui = 42
const int *ptr = &ui
*ptr = 52(error)
(实际程序中常用于函数形参,以此来确保传递给函数的实际对象在函数中不因为形参而修改
const指针:本身的值一旦初始化就不能再去修改。但是可以通过该指针修改其所指对象的值
int i = 3
int *const pi = &i
*pi = 4 (right)
pi = &j (error)
动态数组:
使用new在自由存储区中分配存储空间,创建动态数组。动态数组与数组变量不同的是不会自动释放,动态分配的数组将一直存在,直到程序显示地释放delete
动态数组的定义:new表达式指定数组的类型、维数来创建,返回指向新分配数组的第一个元素的指针
    int *pia = new int[10]
初始化动态分配的数组:类类型调用默认构造方法,内置类型后面加上()可以初始化
const对象的动态数组: const pi = new const int[10]()  //必须初始化
释放动态空间:
delete [] pia //释放了pia所指向的数组
delete pia [1] //表示释放当前元素的空间


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C Primer是一系列的编程教材,C Primer 5和C Primer 6是其中的两个版本。这两个版本都是以C语言为基础,旨在帮助初学者掌握C编程的基本知识和技巧。 首先,C Primer 5是早期的版本,它覆盖了C语言的基础知识并逐步介绍了更高级的编程概念和技术。这本书适合初学者,无论是学习C语言作为第一门编程语言还是已经有其他编程经验的人想要了解C语言。C Primer 5的内容涵盖了变量、数据类型、运算符、控制流、数组、指针、字符串等基本概念和操作。此外,该版本还介绍了C语言的面向对象编程概念,并提供了一些实例来帮助读者理解应用。 而C Primer 6是更新的版本,它在C Primer 5的基础上进行了更新和完善。这本书扩展了对C语言的深入介绍,并增加了一些更高级的主题,如动态内存分配、多线程编程、网络编程等。此外,C Primer 6还提供了更多的示例和练习,以帮助读者更好地掌握各种概念和技巧。 总的来说,C Primer 5和C Primer 6都是优秀的编程教材,它们分别适合不同层次的学习者。对于初学者来说,C Primer 5提供了一个很好的起点,并为他们打下了坚实的基础。而对于那些已经掌握了C基础知识的人来说,C Primer 6则是更好的选择,它深入探讨了C语言更高级的主题,帮助读者扩展和提升他们的编程能力。无论选择哪个版本,掌握C语言的基本概念和技巧对于学习其他编程语言和进行系统编程都至关重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值