`

【C++ Primer】第四章学习笔记 (复合类型)

 
阅读更多

一,数组

1,数组只有在定义时候才能使用初始化,不能将一个数组赋给另一个数组。

int a[4]={1,2,3,4};//正确

int a[4];

a[4]={1,2,3,4};//不正确

int b[4]=a;//不正确

2,初始化数组时候,提供少于数组元素数目的部分数值,则将剩余赋值为0;

float a[5]={1,2};

3,如果初始化数组时候,方括号内[ ]为空。C++编译器将计算元素个数。

short a[ ]={1,2,3,4,5};

int number=sizeof(a)/sizeof(short);//计算元素个数(可见字符个数)

chara[]={'a','b','c','d','e'};//必须是char 类型的 字符串

strlen(a);//计算可见字符串个数

二,字符串

1,字符串结尾字符为'\0'(ASCII码为0)

char a[5]={'a','b','c','d','e'};// 纯字符数组,最好不要当做字符串处理

char a[5]={'a','b','c','d','\0'};//结尾为空字符,可以当做字符串处理

char a[15]="I am a student";//系统自动在最后一个字符加上'\0';

char a[]="I am a student";//系统自动算字符个数

【remember】确定字符串所需最短数组时候,不要忘记结尾空字符串。

"s" 表示两个字符 's'和'\0';

2,字符串输入:面向行输入getline()

char a[20];//必须为char类型的 字符数组
cin.getline(a,20);//将用户输入的字符读入到一个包含20个元素的 a数组中。
cout<<strlen(a);//输出输入字符个数

如果输入的字符多于19个(1个'\0'),geline仅仅取前19个字符。而多于的不会留在输入队列中(区别与get())

3,字符串输入:面向行输入get()

char a[2];
char b[2];
cin.get(a,2);
cin.get(b,2);
cout<<strlen(a)<<endl;
cout<<strlen(b)<<endl;

输入:abcd

输出:1 1 如果是getline()则输出:1 0

get()取的是n-1个可见字符,数组声明为n 则读取n-1字符,最后一个设置为'\0';遇到换行符则将其留在输入队列。

第二次调用cin.get()读取第一个字符为 换行符。

【难点】两个cin 为何只允许输入一次??

char a[5];
cin.get(a,5);
cin.get();//读取输入队列中换行符并丢弃。防止下次读换行符时认为结束而终止。造成第二次不能输入
cout<<a[1]<<endl;

char b[5];
cin.get(b,5);

cout<<b[0]<<endl;

三,string类型

1,连接两个字符串

string str1,str2,str3;

str3=str1+str2;

/*上面是C++做法,下面是C语言做法*/

strcpy(str3,str1);//将str1复制到str3中

strcat(str3,str2);//将str2添加到str1中

2,未被初始化的字符数组,第一个空字符出现的位置是随机的。

char a[10];
cout<<strlen(a);

输出 4 //0-9 随机

四,结构类型

1,struct 用法

struct node

{

int data;

node *next;

}p1;//声明结构类型的变量

2,共用体 union

一种数据结构格式存储不同结构类型,但是每次只能使用一个类型。

struct node

{

int data;

union id

{

long id_num;

int id_num;

}

node *next;

}p1;//

/*一点了,该睡觉了……未完待续*/

--------------------------------------------------------------------------------------------------------------

/*元旦三天假期,偷懒了一下。继续奋战*/

3,枚举 enum

用法:enum 枚举名{所包含的元素};

默认枚举值: enum name{red,orange,yellow,green,blue}//默认,red=0;orange=1;yellow=2……

设置枚举值:enum name{one=1,two=2,four=4,a,b};//默认指定值 four之后,a=four+1=5;b=6

声明变量:name band;

band=red;//valid 在不进行强制转换情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量

band++; //invalid 没有为枚举定义算术运算

band=2; //invalid 将整型赋值给枚举类型将导致类型错误

int color=2+red// valid 结果为int型,2

band=band(2);//按照{two=2} band=two; 可以通过强制转换的方式 将整型 转化为 枚举类型

4,指针和自由存储空间

1)用法: int a=6;

int *p;// ‘*p’ 表示存储在p地址处的值

p=&a;//指针为p,存储的是值的地址,而不是值本身。

或者写为:int* p=&a;//将指针 p的值设置为&a 而不是将 *p的值

2)指针的危险

long * length;

*length=25365;//length 确实是一个指针,但是没有说明指向哪里,原因是没有初始化指针length

3)new/delete申请与释放内存

int * pn=new int ;//分配int型内存,然后把该内存块地址赋值给指针

*pn=100;//给声明的内存单元赋值

delete pn;//释放pn指向的内存单元,不会删除pn指针本身(pn可以指向另一个新分配的内存块)

【注意】不要尝试释放已经释放的内存块,delete pn;之后再delete pn 会有意想不到的错误

不能使用delete释放声明变量所获得的内存(只能释放new申请的)int *p=&a;//不能delete

4)new创建动态数组

int *a=new int[100];

delete [] a;//[]告诉程序释放的是数组

【原则】

不要使用delete释放不是new分配的内存

不要使用delete释放同一个内存块两次

如果使用new[ ]为数组分配内存,则应使用delete[ ]来释放

如果使用new 为变量分配内存,则应使用delete来释放内存,对空指针应用delete是安全的

五,指针、数组和指针算术

1,double a[3]={100,200,300};

double *p=a;//p指针指向的是数组a的第一个元素的地址

cout<<"地址为:"<<p+1<<"存储的值为:"<<*(p+1)<<endl;//输出的是a[1]的地址和a[1]的值

说明:p+1 增加的量等于 p指针指向类型的字节数(double 8字节)

C++将数组名解释为数组第一个元素的地址

2,sizeof作用于 数组显示数组占用的字节数,作用于指针显示指针长度

程序:

3,数组名是第一个元素地址,但是cout对象认为char 数组的地址为字符串地址

程序:

cout 输出char数组时,从第一个字符元素输出一直到遇到空字符'\0'

4,不要使用常量和未被初始化的指针来接受输入

char *p;

const char *a="rose";

cin>>p;//不正确

cin>>a;//不正确

5,一个使用new和delete的程序范例

程序说明:两次输出的地址是一样的。如果去掉delete []name 则 已经使用但未被释放的地址无法使用


分享到:
评论

相关推荐

    C++ Primer 第四版学习笔记.rar

    这份笔记以清晰、实用的方式阐述了C++ Primer第四版中的知识点,对于想要踏入或深化C++编程的读者来说,是一份非常有价值的参考资料。 C++ Primer是C++编程领域的一本经典教材,第四版更是结合了现代C++的特性进行...

    C++ Primer 中文版(第四版)学习笔记~

    以上是C++ Primer第四版学习笔记中涉及的一些核心知识点。这些知识点涵盖了C++编程的基础语法、数据类型、容器、指针、内存管理以及控制结构等多个方面,对于初学者理解和掌握C++语言具有重要意义。希望这些内容能够...

    C++Primer 第四版课后习题解答(第1~18章完整答案)完整版

    《C++ Primer 第四版》是一本经典的C++学习书籍,涵盖了从基础到高级的各种主题。这份课后习题解答提供了第1至18章的完整答案,旨在帮助读者深入理解书中的概念并提高编程技能。 第一章“快速入门”引导读者进入C++...

    c++primer第五版习题答案(第12章)

    但是,我可以根据《C++ Primer》第五版的内容结构以及一般C++的学习顺序,为读者提供第12章可能涵盖的知识点,并对C++11标准中的相关概念进行介绍。 第12章通常会涉及C++中的输入输出库(I/O库),这是C++编程中必...

    C++Primer读书笔记:C++概述.pdf

    C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。

    c++primer第五版习题答案(第17章)

    第17章通常会关注C++中的特殊工具和技术,比如了运行时类型识别(RTTI)、智能指针、标准库中的其他组件以及C++11的特性等。在这一章节中,读者可以通过习题来加深理解并掌握这些高级特性。习题通常会提供一个实际...

    C++ Primer第四版【中文高清扫描版】.pdf

    《C++ Primer 第四版》是著名的C++编程语言教程,由Stanley B. Lippman、Josée Lajoie和Barbara E. Moo三位作者共同撰写。该书自出版以来,已成为广大程序员学习C++的必备书籍。第四版对前三版的内容进行了彻底的...

    C++primer第四版源代码

    《C++ Primer》第四版是C++编程领域的一本经典教材,由Lippman, Lajoie, and Moo三位作者合著。这本书深入浅出地介绍了C++语言的基础知识、中级概念以及高级特性,旨在帮助读者掌握现代C++编程技术。源代码文件包含...

    c++primer 学习笔记

    C++ Primer 是一本经典的C++学习书籍,涵盖了C++的基础知识和高级特性。这篇学习笔记主要涉及了C++编程的一些核心概念,包括程序结构、变量、基本类型、初始化与赋值、可读性、常量与引用、typedef、枚举以及标准库...

    C++Primer(第4版)-课后习题答案.pdf

    4. 第四章数组和指针:讨论一维和多维数组,以及指针的概念,包括指针的声明、赋值、解引用,以及指针与数组的关系。 5. 第五章表达式:涵盖算术、比较、逻辑、赋值等不同类型的表达式,以及运算符的优先级和结合性...

    《C++ Primer Plus第6版中文版》学习笔记(第七章)

    《C++ Primer Plus 第六版中文版》的学习笔记聚焦于第七章,主要讲解了C++中的函数,包括函数的分类、无返回值和有返回值的函数、返回值的类型限制、函数原型的重要性和作用,以及ANSI C与C++在函数原型上的差异。...

    C++ primer plus第五版学习笔记

    C++ primer plus 第五版的个人学习笔记,仅供大家学习参考。

    c++ primer第4版学习笔记

    12. **C++11新特性**:第四版涵盖了C++11标准的新特性,如lambda表达式、右值引用、自动类型推断(auto)、范围for循环等,这些都是现代C++编程的重要组成部分。 这份“C++ Primer 第4版”学习笔记包含了所有这些...

    c++primer第五版习题答案(第19章)

    标题《c++primer第五版习题答案(第19章)》和描述《c++primer第五版中文版课后答案(第19章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚》透露出的IT知识点主要围绕《C++ ...

    C++Primer 习题解答(第4版)--绝对完整版

    这本习题解答是针对C++ Primer(第四版)教材的,旨在帮助读者巩固和深化对C++的理解。在学习C++的过程中,解决习题是提升编程技能的关键步骤,这本书提供了全面的习题解析,涵盖了从基础语法到高级特性的各个层面。...

    c++primer第五版习题答案(第13章)

    根据提供的文件信息,文件标题为“c++primer第五版习题答案(第13章)”,描述提到这是“c++primer第五版中文版课后答案(第13章)”的PDF格式文件,且这些答案来自书籍的习题集。同时,文件内容是通过OCR技术从纸质...

    c++primer练习答案(完整版)

    c++primer第四版练习答案完整版。

    《C++ Primer Plus第6版中文版》学习笔记(第十章)

    《C++ Primer Plus第6版中文版》学习笔记(第十章) 红字内容是有疑问或者没把握的。 绿字部分是比较重要,或者经过确认的

    C++ Primer中文第四版配套实例

    《C++ Primer中文第四版配套实例》是一本深入学习C++编程语言的重要参考资料,它与国际知名编程教材《C++ Primer》第四版紧密结合,旨在帮助读者通过实践加深对C++概念的理解。本套实例覆盖了C++语言的核心特性和...

Global site tag (gtag.js) - Google Analytics