当前位置:首页 > 公众号精选 > C语言与CPP编程
[导读]“ 本文为《CPrimer中文版(第五版)》1-16章阅读要点总结。原书更为详细,本文仅作学习交流使用。”第一章开始—1.1编写一个简单的C程序intmain(){return0;}每个C程序都包含一个或多个函数,其中一个必须命名为main.1.2初识输入输出对象用途cin标准输...

 本文为《C Primer 中文版(第五版)》1-16章阅读要点总结。原书更为详细,本文仅作学习交流使用。

第一章 开始

1.1 编写一个简单的C 程序

int main(){ return 0;}每个C 程序都包含一个或多个函数,其中一个必须命名为main.

1.2 初识输入输出

对象用途
cin标准输入
cout标准输出
cerr标准错误
clog输出运行时的一般性消息

1.3 注释简介

两种:

单行注释://

界定符:/* 和 */

1.4 控制流

while;for;if;

第二章 变量和基本类型

P30-P71

数据类型是程序的基础。C 语言支持广泛的数据类型。

基本内置类型

算术类型

类型最小尺寸
bool未定义
char8位
w_char_t16位
char16_t16位
char32_t32位
short16位
int16位
long32位
long long64位
float6位有效数字
double10位有效数字
long double10位有效数字

类型转换

不要混用符号类型和无符号类型。

变量

变量定义

(1)基本形式:

类型说明符,随后紧跟着一个或者多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。

(2)初始值

在C 中,初始化和赋值是2个完全不同的操作。初始化的含义是创建变量的时候赋予一个初始值,而赋值的含义是把对象的当前值擦除,用一个新值来替代。两者区别很小。

(3)列表初始化

用花括号来初始化变量的方式,称为列表初始化。

(4)默认初始化

如果定义变量没有指定初始值,则变量被默认初始化。

::: tip

例外情况:

定义在函数体内部的内置类型变量将不被初始化,其值未定义。

建议初始化每个内置类型的变量。:::

变量声明和定义的关系

变量声明:规定了变量的类型和名字。

变量定义:除声明之外,还需要申请存储空间。

如果想声明一个变量,而非定义它,需要使用extern关键词。

extern int i; // 声明i而非定义iint j; // 声明并定义j::: tip变量只能被定义一次,但可以被多次声明。:::

名字的作用域

作用域:C 中大多数作用域都用花括号分隔。

作用域中一旦声明了某个名字,它所嵌套的所有作用域都能访问该名字。同时,允许在内层作用域中重新定义外层作用域中有的名字。

::: warning如果函数有可能用到某全局变量,则不宜再定义一个同名的局部变量。:::

复合类型

定义:复合类型是基于其他类型定义的类型。

引用

引用:为对象起另外一个名字。

::: warning引用必须被初始化。引用本身不是对象,所以不能定义引用的引用。引用要和绑定的对象严格匹配。引用类型的初始值,必须是一个对象。:::

指针

指针:本身就是一个对象。允许对指针赋值和拷贝。指针无须在定义的时候赋值。

(1)利用指针访问对象

如果指针指向了一个对象,则允许使用解引用符(*)来访问该对象。

(2)void* 指针

理解复合类型的声明

(1)指向指针的指针

** 表示指向指针的指针

*** 表示指向指针的指针的指针

(2)指向指针的引用

不能定义指向引用的指针。但指针是对象,所以存在对指针的引用。

const限定符

定义:const用于定义一个变量,它的值不能被改变。const对象必须初始化。

::: tip

默认状态下,const对象仅在文件内有效。当多个文件出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。

如果想让const变量在文件间共享,则使用extern修饰。

:::

(1)const的引用

允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式。

一般,引用的类型必须与其所引用对象的类型一致,特殊情况是表达式。

(2)指针和const

弄清楚类型,可以从右边往左边阅读。

(3)顶层const

top-level const 表示指针本身是个常量

low-level const表示指针所指的对象是一个常量。

(4)constexpr和常量表达式

C 新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。

处理类型

类型别名

两种方法用于定义类型别名:

(1)使用关键词typedef

typedef double wages; //wages是double的同义词typedef wages *p; // p是double*的同义词(2)别名声明

using SI = Sales_item; // SI是Sales_item的同义词auto类型说明符:让编译器通过初始值来推算变量的类型。

decltype类型指示符:选择并返回操作符的数据类型。只得到类型,不实际计算表达式的值。

自定义数据结构

(1)类

数据结构是把一组相关的数据元素组织起来,然后使用它们的策略和方法。

类一般不定义在函数体内,为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且类所在头文件的名字应该与类的名字一样。

头文件通常包含那些被定义一次的实体。

(2)预处理器

#ifndef SALES_DATA_H#define SALES_DATA_H#endif一般把预处理变量的名字全部大写。

术语

空指针 :值为0的指针,空指针合法但是不指向任何对象。nullPtr是表示空指针的字面值常量。

void*:可以指向任意非常量的指针类型,不能执行解引用操作。

第三章 字符串、向量和数组

P74-P118

string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列。

命名空间的 using 声明

头文件不应包含using声明。

using namespace:name;

标准库类型 string

#include using namespace std;

(1)定义和初始化

string s1;sting s2(s1);string s3("value");string s3 = "value";string s4(n, 'c');

(2)string对象的操作

s.empty(); // 判空s.size(); // 字符个数s[n]; // s中第n个字符的引用s1 s2; // s1和s2连接<,<=,>,>= // 比较::: warning

标准局允许把字面值和字符串字面值转换成string对象。字面值和string是不同的类型。

:::

(3)处理string对象中的字符

::: tipC 程序的头文件应该使用cname,而不应该使用name.h的形式:::

遍历给定序列中的每个值执行某种操作

for (declaration : expression) statement

标准库类型 vector

标准库vector表示对象的集合,其中所有对象的类型都相同。

vector是一个类模板,而不是类型。

(1)定义和初始化vector对象

vector v1;vector v2(v1);vector v2 = v1;vector v3(n, val);vector v4(n);vector v5{a,b,c...}vecrot v5={a,b,c...}如果用圆括号,那么提供的值是用来构造vector对象的。

如果用花括号,则是使用列表初始化该vector对象。

(2)向vector对象添加元素

先定义一个空的vector对象,在运行的时候使用push_back向其中添加具体指。

(3)其他vector操作

v.empty();v.size();v.push_back(t);v[n];::: warning

只能对确认已存在的元素执行下标操作。

:::

迭代器介绍

迭代器运算符

*iter // 解引用,返回引用iter->mem // 等价于 (*iter).mem iter--iteriter1 == iter2iter1 != iter2iter niter - niter = niter -= niter1 - iter2 // 两个迭代器相减的结果是它们之间的距离>, >=, <, <= // 位置比较::: warning

凡是使用了迭代器的循环体,都不能向迭代器所属的容器添加元素。

:::

数组

(1)数组、指针

使用数组下标的时候,通常将其定义为size_t类型。

::: warning

定义数组必须指定数组的类型,不允许用auto推断。

不存在引用的数组。

如果两个指针分别指向不相关的对象,则不能进行对这2个指针进行比较。

:::

多维数组

多维数组实际上是数组的数组。

size_t cnt = 0;for(auto
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

业内消息,昨天苹果公司(Apple)发布了搭载 M4 芯片的 iPad Pro、搭载 M2 芯片的 iPad Air、新的妙控键盘、Apple Pencil Pro 等一系列新品,并介绍了 Final Cut Pro 和...

关键字: 苹果 iPad

业内消息,TikTok 目前正就早前通过的禁令起诉美国政府。TikTok 昨天提交的法庭文件表示,早前拜登政府签署的法令以国家安全为由要求 TikTok 在 9 个月内与其母公司字节跳动进行剥离,否则将禁止在美国地区开展...

关键字: TikTok

近日工信部发布了2024年一季度电子信息制造业运行情况,海关统计我国电子信息制造业生产稳步增长,出口持续回升,效益继续改善,投资保持较高增速,地区间营收分化明显。

关键字: 集成电路

5月6日,新思科技宣布将把其软件完整性业务(SIG部门)出售给Clearlake Capital和Francisco Partners领导的私募股权财团,交易价值21亿美元,预计今年下半年完成。交易完成后,该业务将成为一...

关键字: 新思科技 SIG

业内消息,科技媒体 Android Headline 近日深挖数据库,发现魅族计划推出包括魅族 21 Note 在内 5 款手机,型号分别为 M411H、M411L、M412H、M421Q 和 M431Q,只是目前尚未确...

关键字: AI 魅族

业内消息,昨天问界(AITO)汽车发布题为《关于山西省侯平高速路段交通事故中问界新 M7 Plus 相关技术问题的说明》的长微博。博文表示 AITO 汽车自 4 月 26 日山西省侯平高速路段事故发生后一直配合交警部门开...

关键字: 问界 AITO 华为

近日,字节跳动发布《企业纪律与职业道德委员会通报(2024年2号)》,因涉嫌构成刑事犯罪、违反廉洁诚信制度、违反利益冲突制度、违反信息安全制度四项原因辞退员工61人。近年来,多家互联网公司密集进行内部反腐整顿,包括腾讯、...

关键字: 互联网 字节跳动 辞退 腾讯 百度

业内消息,4月28日特斯拉CEO马斯克闪电访华,次日马斯克在与宁德时代董事长曾毓群会面后已经离开北京。马斯克不到24小时的访问行程硕果累累,最重大的突破是特斯拉在智能驾驶合规性方面获得“放行”,成为首个通过国家相关标准的...

关键字: 特斯拉 自动驾驶 FSD

近日,华为内部发布了一则令人瞩目的人事调整文件,宣布华为终端BG(业务集团)CEO余承东将卸任,转而担任华为终端BG董事长一职。这一变动不仅引起了业界的广泛关注与讨论,也预示着华为在组织架构和战略方向上的一次重大调整。

关键字: 余承东 华为 终端BG CEO

业内重磅消息,近日4家日本电信行业领军企业(DOCOMO、NTT公司、NEC公司以及富士通)联手打造的全球首款高速6G无线设备正式亮相。该创新产品的问世是科技界的一项重大突破,标志着通信技术迈入了全新的时代。

关键字: 日本 6G 无线设备
关闭
关闭