1.数据类型
char(字符数据类型) short(短整型) int(整型) long(长整型) long long(更长的整型) float(单精度浮点数) double(双精度浮点数)
2.变量的命名
只能由字母(包括大写和小写)、数字和下划线( _ )组成。
不能以数字开头。
长度不能超过63个字符。
变量名中区分大小写的。
变量名不能使用关键字。
3.操作符
移位操作符:<<(左移)左边删掉,右边补0。 >>(右移)右边删掉,左边补符号位。
位操作符:&有0为0,^有1为1,| 同0异1。
4.关键字static
修饰局部变量,改变了变量的生命周期,使其出了作用域依然存在,程序结束生命周期才结束。
修饰全局变量,使该变量只能在本源文件内使用。
修饰函数,使得该函数只能在本源文件内使用。
5.#define 定义常量和宏
#define MAX 1000
#define ADD(x,y)((x)+(y))
6.指针大小
指针大小在32位平台是4个字节,64位平台是8个字节。
7.整型提升
负数的整型提升:高位补充符号位,即为1
正数的整型提升:高位补充符号位,即为0
无符号整型提升:高位补0
算数转换:long <- double double <- float <- unsigned long int <- long int <- unsigned int <- int
8.指针
规避野指针:1. 指针初始化 2. 小心指针越界 3. 指针指向空间释放,及时置NULL 4. 避免返回局部变量的地址 5. 指针使用之前检查有效性
指针运算:两个指针相减(同一个数组中),结果的值为他俩之间的距离。其它情况不能相减。
指针数组:存放指针的数组。
9.结构体
结构体传参:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。因此结构体传参的时候,要传结构体的地址。
10.调试
两个版本:debug版本通常称为调试版本。它包含调试信息,并且不作任何优化,便于程序调试。
Release版本称为发布版本。它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
最常使用的几个快捷键: F5 启动调试,经常用来直接跳到下一个断点处。
F9 创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
F10 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最 长用的)。
CTRL + F5 开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。
监视变量:调试-》窗口-》监视-》**
监视内存:调试-》窗口-》内存-》**
调用栈堆:调试-》窗口-》**
右键-》转到反汇编
11.数据存储
(1)计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理。
(2)大小端机介绍
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。

我们常用的 X86 结构是小端模式。

12.指针高阶
(1)代码 const char* pstr = "hello bit.";是将字符串的首地址存放在指针pstr中。
(2)C/C++会把常量字符串存储到单独的一个内存区域,当几个指针。指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化 不同的数组的时候就会开辟出不同的内存块。
(3)指针数组,即存放指针的数组。例如:字符指针数组,整型指针数组。int * p2 [10]。
数组指针,即存放数组的指针。注意:int (*p2)[10];([]比*的优先级高,所以加上‘()’)。
(4)数组名和&数组名
前者表示数组的首元素地址,后者表示整个数组的首地址。
区别:整形数组arr[10]。arr+1,将会跳过4个字节。&arr+1将会跳过40个字节。
13.字符函数和字符串函数
(1)strlen:size_t strlen ( const char * str )。字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。
(2)strcpy:char* strcpy(char * destination, const char * source )。会将源字符串中的 '\0' 拷贝到目标空间,并且返回目标空间首地址。
(3)stract:char * strcat ( char * destination, const char * source )。
作用:Appends a copy of the source string to the destination string.
会将源字符串中的 '\0' 拷贝到目标空间,并且返回目标空间首地址。
(4)strcmp:int strcmp ( const char * str1, const char * str2 )。
作用:This function starts comparing the first character of each string.
第一个字符串大于第二个字符串,则返回大于0的数字。 第一个字符串等于第二个字符串,则返回0 。第一个字符串小于第二个字符串,则返回小于0的数字。
(5)strncpy:char * strncpy ( char * destination, const char * source, size_t num )。
作用:Copies the first num characters of source to destination.
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
(6)strncat:char * strncat ( char * destination, const char * source, size_t num )
(7)strncmp:int strncmp ( const char * str1, const char * str2, size_t num )。
比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
(8)strstr:char * strstr ( const char *str1, const char * str2);
查找子字符:串返回指向 str2 中第一次出现的 str1 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。
14.自定义类型
结构体内存对其:先看一个例子

1. 第一个成员在与结构体变量偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8
3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

通过#pragma可以修改默认对齐数。格式:#pragma pack(x)即修改默认对齐数为x。
1万+

被折叠的 条评论
为什么被折叠?



