C++基础2020-11-04 & 2020-11-08

--- 卷王之卷,我愿称之为HKU第一卷!

C++指针

  • 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址
  • 指针是一个变量,其值为另一个变量的地址
  • 所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数
  • 在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针
  • NULL 指针是一个定义在标准库中的值为零的常量
  • 在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的
  • 内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置
  • 未初始化的变量存有一些垃圾值,导致程序难以调试
  • 在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,因为数组是一个常量指针
  • 指针可以用关系运算符进行比较
  • 修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值
  • 把 ptr 声明为一个数组,由 MAX 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针 int *ptr[MAX];
  • 指向指针的指针(多级间接寻址)
  • 能接受指针作为参数的函数,也能接受数组作为参数
  • C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量

C++ 引用

  • 不存在空引用,引用必须连接到一块合法的内存,引用必须在创建时被初始化
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象,指针可以在任何时候指向到另一个对象
  • void swap(int& x, int& y) 通过引用调用函数
  • double& setValues( int i ) 返回引用
  • 被引用的对象不能超出作用域,返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用

C++ 日期 & 时间

  • C++ 标准库没有提供所谓的日期类型,继承了 C 语言用于日期和时间操作的结构和函数
  • 为了使用日期和时间相关的函数和结构,需要引用 <ctime> 头文件
  • 四个与时间相关的类型:clock_t、time_t、size_t 和 tm
  • clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数

time函数

  • time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位
  • 如果 seconds 不为空,则返回值也存储在变量 seconds 中
  • time.h是早期的头文件, 在C++标准之前就有了, ctime是C++标准的头文件, 两个一般是同一个文件
  • char *ctime(const time_t *timer) 返回一个表示当地时间的字符串
    time_t curtime;
    time(&curtime);
    cout<<ctime(&curtime);
  • struct tm *localtime(const time_t *timer)
  • clock_t clock(void) 返回程序执行起(一般为程序的开头),处理器时钟所使用的时间
  • 为了获取 CPU 所使用的秒数,您需要除以 CLOCKS_PER_SEC
  • 在 32 位系统中,CLOCKS_PER_SEC 等于 1000000,该函数大约每 72 分钟会返回相同的值
clock_t st = clock();
...
clock_t ed = clock();
cout<<(double)(ed-st)/CLOCKS_PER_SEC;
  • char *asctime(const struct tm *timeptr) timeptr 是指向 tm 结构的指针
  • struct tm *gmtime(const time_t *timer) 格林尼治标准时间
  • time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值
    timeinfo = localtime(&rawtime);
    timeinfo->tm_year -= 1900;
    timeinfo->tm_mon -= 1;
    timeinfo->tm_mday = day;
    mktime(timeinfo);
    cout<<timeinfo->tm_wday;

  • double difftime(time_t time1, time_t time2)
  • size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) 根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中
  • strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);

C++ 基本的输入输出

  • C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备流向内存,这叫做输入操作。如果字节流是从内存流向设备,这叫做输出操作
  • <iomanip>,该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务
  • <fstream>,该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节
  • cout 对象"连接"到标准输出设备,通常是显示屏
  • C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值
  • << 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项
  • 预定义的对象 cin 是 iostream 类的一个实例
  • C++ 编译器根据要输入值的数据类型,选择合适的流提取运算符来提取值,并把它存储在给定的变量中
  • 如果要求输入多个数据,可以使用如下语句:cin >> name >> age;,相当于 cin >> name;cin >> age;
  • 预定义的对象 cerr 是 iostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出
  • 预定义的对象 clog 是 iostream 类的一个实例。clog 对象附属到标准错误设备,通常也是显示屏,但是 clog 对象是缓冲的。这意味着每个流插入到 clog 都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出
  • 使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出

C++ 数据结构

struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
  • 为了访问结构的成员,我们使用成员访问运算符(.)
  • 可以把结构作为函数参数, void printBook( struct Books book );
  • 为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符
  • 为创建的类型取一个"别名"
typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
}Books;
  • 现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352