C语言模糊,遗漏知识点总结

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。

下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值