CC++ 语言学习笔记Word格式.docx
- 文档编号:16690422
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:23
- 大小:119.13KB
CC++ 语言学习笔记Word格式.docx
《CC++ 语言学习笔记Word格式.docx》由会员分享,可在线阅读,更多相关《CC++ 语言学习笔记Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
,此语句已经在word数组后面加上’\0’了。
3.printf函数和cout输出,必须输出带有’\0’的字符串数组,即真正的字符串。
4.charc=‘\0’;
if(c)if(c!
=‘\0’)。
5.当一个字符串想通过书写多行来表示,则必须在一行的结束加上“\”,语句
charvalues[]=“wangzhulong”等价于charvalues[]“wang”“zhu””long”;
6.若在程序中出现的文字常量字符串"
china"
,默认它将是char[6]类型的,语句(char*charPtr="
)申请的内存在文字常量区中,而语句(charcharArray[]="
)申请的内存在运行时栈中。
7指针:
1.指针的4大功能:
1:
“动态”分配内存,间接存取数值;
2:
描述更复杂的数据结构;
3:
改变传递给函数的参数的值;
4:
更加简洁、有效的处理数组。
2.&
为一元操作符中的地址运算符,用于获取指向某个目标的指针。
3.const修饰的指针变量有两层含义,1:
不能修改其目标指针,例如:
char*constc;
不能修改目标指针指向的数值,例如:
constchar*c。
4.定义数组指针时无需指明该指针是“指向数组的指针”类型,只需定义该指针是“指向数组元素的指针”类型即可。
5.C语言将一个没有下标的数组看成是指向该数组第一个元素的指针,因此语句values等价于&
values[0]。
6.1、函数的参数和返回值若为数组,都会自动转换为指向该数组0号元素的指针。
7.指针指向的内存区域可以在运行时栈中(它一般有作用域的限制,会被编译器自动回收)也可以在堆内存(它没有作用域的限制,不会被编译器自动回收,需要手动回收)中。
函数内部若使用表达式intintArrays[10]声明数组,则该数组所占的内存空间将会在该函数调用结束后自动销毁(因为是在运行时栈中创建),因此若想通过一个函数返回数组,则必须使用动态内存分配函数calloc或者malloc为该数组在堆内存中分配内存。
8.数组和指针的差别:
1、数组只能通过大括号“{}”或者字符串(字符串数组)直接赋值;
而指针只能通过指针或者字符串(字符串数组)直接赋值;
2、sizeof操作符在计算数组和指针所占的内存空间的大小时不同,指针的值都为4。
9.数组指针:
1、数组指针可以通过加减整数值来调节它所指向的数组元素的索引,因为数组是连续的内存区域,values[n]等价于*(values+n);
2、数组指针越界为未知数值,而非数组指针越界为其越界数值。
10.多维数组相当于指针的指针,例如:
charchars[3][3]char*(*chars)char*chars[];
数组指针运算之后的类型保持不变,在定义指针的指针时需要加“()”。
11.声明一个指向函数的指针时,只需将“*”号和函数名用括号括起来即可,直接传递函数名等于传递一个指向该函数的指针(当然也可以加上&
,但可以省略);
调用函数指针指向的函数时,直接接函数指针名加参数列表(当然也可以加上*,但可以省略)。
12.void*为C语言的通用指针,即它可以保持指向任意数据类型的指针(指向函数的指针除外),在实际使用过程中需要进行强制类型装换。
注意:
指针与数组的三个等价于(按照函数调用顺序):
1.values等价于&
values[0];
2.函数参数声明intvalues[]等价于int*values;
3.values[n]等价于*(values+n)。
8位运算:
1.如何将负数变成一个二进制补数:
1.加1(负数的绝对值比正数要大1);
2.取绝对值;
3.转换成二进制;
4.取补数。
2.正数的最大数为2的N次方减去1,负数的最小数为负的2的N次方。
3.浮点数不能进行位运算,只有整数和_Bool类型的数据才可以进行位运算。
4.structArea{_Boolflag:
1;
unsignedshortval:
8;
};
此种模式可以节省内存开销。
9预处理器:
1.使用预处理器可以增加程序的可读性、可扩展性,可移植性。
2.预处理器的语法:
1、以“#”号出现在一行的开始;
二:
前面不能带有任何空格符且后面不能带有“;
”号。
3.C语言的预处理器包括:
1、宏定义语句(#define语句主要定义符号常量);
2、文件包含语句(#include语句);
3、以#if为首的条件编译语句;
4、取消宏定义语句(#undef)。
4.C语言的预处理器中的宏定义语句(#define)其实是在C语言的语法分析之前执行的,它仅仅只是对宏参数进行文本替换,很多时候为了保证结果正确需要加一些“()”。
5.宏定义语句(#define语句)的一个常用的用途用于定义符号常量,并且该符号常量没有局部作用域的概念即它都是全局常量。
6.#define语句定义的符号常量可以出现在程序的任意位置,但是必须出现在使用它之前;
但是符号常量它们之间在相互引用时,顺序可以打乱。
7.宏定义语句一般用一行写完,若想书写多行,必须在后面加上续行符“\”。
8.在定义带有参数的宏定义语句时,我们只需在宏定义名称后面加“()”符号(它们之间不能有空格,它们都是宏参数的一部分)和参数名(不能有参数类型)。
9.可变参数个数的宏定义语句(…)加##__VA_ARGS__完成。
10.在宏定义语句(#define)中,若我们在一个宏参数前面加上“#”(它们之间可有可无空格),则表示在该宏参数前后加上“”“符,将该宏参数变成字符串。
11.在宏定义语句(#define)中,我们可以使用操作符“##”将两个符号(符号可以是宏参数)连接起来。
12.#include语句可以出现在程序的任何地方,只需在引用该文件中的内容之前即可,用””号框起的文件名表示先到源文件所在的目录中去搜索该头文件,若没有搜索到,则再到特定的系统目录中去搜索;
而用<
>
号框起来的文件名表示直接到特定的系统目录中去搜索该头文件。
13.头文件中可以放置任意语句,且头文件中可以嵌套包含其他的头文件。
14.条件编译语句有:
1、#if(如果某个条件满足则编译);
2、#ifdef(如果定义了某个符号则编译);
3、#ifndef(如果没有定义某个符号则编译);
4、#else(或者将编译);
5、#elif(或者某个条件满足则编译);
6、#elifdef(或者如果定义了某个符号则编译);
7、#elifndef(或者如果没有定义某个符号则编译)。
条件编译最后必须通过#endif结束。
15.条件编译语句#if和#elif的条件之间可以加符号“&
&
”和“||”连接,表示逻辑与和逻辑或,它们之间可有可无();
条件编译语句#ifdefOS等价于#ifdefined(OS)。
10C语言的数据类型
1.枚举类型中的每个值其实都为整型数int类型,它可以将某个符号和整数值映射起来,默认情况下,从0开始计数,后面依次递增;
当然枚举值也可以指定一个具体的数值,后面的在此数值上递增,并且枚举类型中的枚举值可以是相同的数值;
当把一个int类型的数值赋值给枚举类型时需要强制类型转换,反过来则不需要。
2.枚举类型的值和同一作用域的其他变量名或者枚举值的符号不能冲突。
3.typedef语句的使用:
1.、声明某数据类型的变量;
2.、变量名用类型名取代;
3、在前面加上typedef。
4.算术表达式在求值时:
1、首先按照浮点数的精度高低(longdouble,double,float)确定最终的值的数据类型;
2、然后再按照整型数的精度高低确定(longlong,long,int);
3、_Bool、char、short、int,枚举类型计算后的值都为int类型。
5.当把一个数从低精度向高精度扩展时(例如:
int到long;
或者char,short到int)。
若此数为有符号数,则进行有符号扩展,即通过原来数的符号位填充左边多出的二进制位;
若此数为无符号数,则通过0填充左边多出的二进制位。
6.C语言在调用一个函数时,编译器必须事先看到该函数的原型申明或者具体定义。
7.全局变量和方法分为外部全局变量和方法(表示可以在所有的源文件中访问,extern符号修饰,默认情况下可以省略),以及内部全局变量和方法(表示只能在本源文件中访问,static符号修饰)。
1.外部、内部全局变量的申明externintintVal;
和staticintintVal;
2.外部、内部全局变量的定义intintVal;
externintintVal=0;
和staticintintVal=0;
3、数组的申明如下:
externintintVals[],多维数组externintintVals[][10];
总之声明时不赋值,定义时需要赋值,省略extern关键字为定义外部全局变量或者方法。
11C语言的输入输出
1.符号常量NULL一般在头文件<
stdio.h>
中定义,也有在<
stddef.h>
中定义的,其值为0。
2.我们通常使用文件结束标示EOF来判断在读取一个文件时,是否达到了结尾,字符的值通常在0–255之间(2的8次方减1,unsignedchar类型),而EOF的值为-1。
3.fopen函数:
fopen函数打开文件模式有6种:
1、读模式(r表示,若文件不存在,则报错);
2、写模式(w表示,若文件不存在,则创建;
若存在,清空文件内容);
3、追加模式(a表示,若文件不存在,则创建;
若存在,在文件后面添加数据);
fopen函数分别还拥有以上3种模式的加强版(读更新模式r+,写更新模式w+,追加更新模式a+),这三种模式都允许我们同时对文件进行读写操作。
若我们打开的文件为二进制文件,则需要在后面加字符b,例如rb等。
4.若fopen函数打开文件成功,则返回一个文件指针(FILE*filePoint,FILE为一个结构类型的别名),否则返回NULL符号。
若文件操作完成之后,需要调用函数fclose关闭文件,释放资源。
函数feof用于判断一个文件是否设置了文件结束标志EOF,它告诉我们是否在文件结束后执行过读操作。
5.文件内容读取函数:
1、getc和putc读取单个字符,用EOF判断读取完成(或者fgetc和fputc);
2、fgets和fputs读取整行数据到字符串数组,若读取完成,返回NULL,写数据一直写到字符串数组中的空字符为止;
3、fprintf和fscanf读取一个字符串;
4、size_tfread(void*,size_t,size_t,FILE*)和size_tfwrite(void*,size_t,size_t,FILE*)缓存读写数据,void*为unsignedchar[],size_t元素个数和元素所占内存的大小,FILE*文件指针。
6.C语言为程序运行时提供了3个已经打开的文件指针,它们分别是stdin(标准输入)、stdout(标准输出)、stderr(标准错误输出)。
7.函数rename(“oldFileName”,“newFileName”)用于重命名文件,函数remove(“filename”)用于删除文件。
8.如何获取文件大小:
1、fseek(filePtr,0L,SEEK_END)(将文件指针指向结尾);
2、longfileSize=ftell(filePtr)(获取文件大小);
3、fseek(filePtr,0L,SEEK_SET)(将文件指针指向开始)。
fseek函数的参数fromwhere的值可为:
SEEK_SET(开始),SEEK_CUR(当前位置),SEEK_END(结尾)。
12C语言的杂项和高级特性:
1.union的使用:
1、union的声明语句和struct非常类似,并且也可以省略其数据类型名;
与struct不同的是,union所有的成员变量都指向同一内存空间,因此它只能同时保存一个成员变量;
2、若在使用uniion时,没有指定其成员变量名,默认则表示指向该union的第一个成员变量。
2.register在修饰某个变量时,是向编译器发出请求,让其将该变量存储到寄存储器中(但不一定存储到寄存储器中);
基本数据类型和指针类型的变量都可以使用register修饰符(因为它们占据的内存空间小);
register修饰的变量不能使用地址运算符&
,寄存储器是不能直接操作的。
3.volatile修饰符与const修饰符的作用恰恰相反,它告诉编译器该变量的数值可能会经常变化。
4.restrict修饰符,表示只有一个目标指针指向某个变量,目前很多编译器已经不再支持。
C语言的动态分配内存:
5.sizeof操作符用于返回特定数据类型或变量以字节为单位所占的内存空间的大小,因此它的操作数可以是变量名(变量所属的数据类型所占的内存空间)、数组名(数组元素类型所占的内存空间的大小乘以数组的长度)、基本类型名、扩展类型名等。
6.sizeof操作符返回的各种基本数据类型所占据的内存空间的大小:
1、_Bool和bool——1;
2、char——1;
3、short——2;
4、int——4;
5、long——4;
6、longlong——8;
7、float——4;
8、double——8;
9、longdouble——12;
10、指针类型——4。
7.我们常常使用sizeof操作符来计算数组的长度例如:
intintArrays[100],sizeof(intArrays)/sizeof(intArrays[0])==100;
8.动态分配堆内存:
函数void*calloc(size_t,size_t)(用于数组变量)和函数void*malloc(size_tcount)(用于单个变量)用于动态分配堆内存。
1、返回值void*为C语言的通用指针,需要进行强制类型装换,它表示指向它分配的堆内存的开始地址的指针,分配内存失败时返回NULL;
2、calloc函数的参数为元素的个数和每个元素以字节为单位所占据的内存空间的大小,malloc函数的参数为以字节为单位的内存数目;
3、calloc函数会将分配的内存的内容清零,而malloc则不会,里面为随机的垃圾数据。
9.释放堆内存:
函数voidfree(void*)用于释放函数calloc和malloc所分配的堆内存,它的参数固然为函数calloc和malloc的返回值(指向分配的内存的起始地址的指针,若不是起始地址,则无法释放)。
13C语言小结:
1.特殊转意序列:
1、\a警铃;
2、\b退格;
3、\f表单;
4、\n换行;
5、\r回车;
6、\?
表示?
号。
2.预定义符号常量:
1、__FILE__(当前文件名称或者路径);
2、__LINE__(当前编译的行号);
3、__DATE__(当前日期);
4、__TIME__(当前时间)。
C语言标准库
头文件<
1.类型名size_t:
操作符sizeof的运算结果的类型,其实为unsignedlong类型。
2.类型名ptrdiff_t:
两个相同类型的指针相减所得运算结果的类型。
3.操作符size_toffsetof(TYPE,MEMBER):
结构的成员变量的内存存储的偏移量,返回值size_t类型,参数:
结构名、结构成员变量名。
4.极限值:
short类型为32767(3万多),int,long为20亿左右。
头文件<
string.h>
1.char*strcat(char*s1,char*s2):
字符串叠加函数,将字符串s2叠加到s1,并且返回s1。
2.char*strchr(char*s1,charc):
字符串搜索函数,在字符串s1中搜索字符c,若找到了,返回指向字符c的指针,否则返回NULL;
函数strrchr和它功能类似,只不过是重后往前搜索。
3.intstrcmp(char*str1,char*str2):
字符串比较函数,返回str1<
str2返回-1;
str1>
str2返回1;
str1==str2返回0。
4.char*strcpy(char*s1,char*s2):
字符串复制函数,将s2复制到s1中,并且返回s1。
5.size_tstrlen(char*s1):
返回字符串s1的长度,不包含空字符‘\0’。
6.char*strstr(char*s1,char*s2):
从字符串s1中搜索字符串s2,若搜索到返回指向s2首字符的指针,否则返回NULL。
7.1、memchr(搜索字符串);
2、memcmp(比较字符串);
3、memcpy(字符串复制);
4、memset(字符串快速初始化为同一个字符)。
ctype.h>
1.1、isalpha是否是字母;
2、isdigit是否是数字;
3、isalnum是否是字母或者数字;
4、isblank是否是空白字符;
5、isspace是否是空白字符(包括所有的空白);
6、isgraph是否是图形字符(除空格外的所有字符);
7、islower是否是小写字母;
8、isupper是否是大写字母。
stdlib.h>
1.字符串到num转换:
1、atoi转换成int类型,2、atol转换成long类型;
3、atoll转换成longlong类型;
atof转换成double类型。
2.void*realloc(ptr,size_t):
改变先前分配的内存的大小,ptr先前分配的内存的指针,size_t内存大小,成功返回新的内存指针,否则返回NULL。
3.函数char*getenv(char*env):
获取系统配置的环境变量。
4.voidqsort(void*,size_t,size_t,int(*)(constvoid*,constvoid*))用于排序。
5.函数void*bsearch(constvoid*,constvoid*,size_t,size_t,int(*)(constvoid*,constvoid*));
用于二叉查找。
6.函数intrand()用于产生随机数。
7.函数intsystem(constchar*s)用于执行系统命令,例如:
system("
mkdir/usr/tem/data"
)用于创建目录data。
math.h>
1.1、sqrt平方根;
2、absint类型绝对值,类似的还有labs,llabs,fabs,等;
3、hypot(doublex,doubley)计算x、y的平方和根;
4、doublepow(doublex,doubley):
计算x的y次方。
C++学习笔记
14C++概述:
1.C++程序可以通过C库的C名字或C++名字来使用它,C名字以.h结尾,C++名称以C开头去掉其.h,C++标准头文件都没有其后缀名。
由于C++标准库名称都是在名称空间std中定义的,因此在使用C++标准库的内容时,得使用指示符usingnamespacestd;
C库名称则不需要。
2.赋值操作:
1、显示赋值:
例如:
intintVal=1024;
stringstr=“china”;
2、隐式赋值:
intintVal(2048);
stringstr(“china”);
3、混合赋值:
intintVal=int(1024);
stringstr=stirng(“china”);
4、定义intival(int());
时,ival的值为1。
3.堆内存管理:
1、申请堆内存:
int*intPtr=newint(1024);
int*intsPtr=newint[10];
2、删除堆内存:
deleteintPtr;
delete[]intsPtr;
,使用delete[]时,其数组指针必须指向数组0号元素。
15C++基本语言之数据类型:
字符串:
1.1、表达式:
stringstr;
其实str被初始化成空串;
2、char*和string之间可以通过操作符“==”判断它们之间是否相等;
3、char*和string之间的赋值:
stringstr=chars;
constchar*chars=str.c_str();
4、总之,C++在处理string和char*的混合操作时,会自动将char*类型装换成string类型,因此它们之间可以相等(==)、赋值(=)、连接(+)、赋值连接(+=)等、函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC+ 语言学习笔记 CC 语言 学习 笔记