c语言基础知识整理(二)

来源:互联网 发布:java anti csrf token 编辑:程序博客网 时间:2024/05/17 02:43

C语言知识整理:
1.三字母词:??( == [ ??) == ] ??< == { ??> == } ??= == #
??/ == \ ??! == | ??’ == ^ ??- == ~

2.单位:1byte == 8bit 1kb = 1024byte 1mb = 1024kb
1gb = 1024mb

3.字符串: strlen() 函数求字符串的长度不包含‘\0’,sizeof() 求数组的字节长度是包含‘\0’的;

4.C语言中const修饰的变量,使变量具有常量属性,但是不是常量,还是变量;而C++中,const修饰的变量使其具有常量属性,且变成常量;

5.auto 局部变量(一般默认)
extern 外部变量(声明外部变量时使用)
register 寄存器(可以用来修饰变量,且其修饰的变量不可取地址,因为它修饰的变量不会放在内存中,但是这是一个建议词,具体是否修饰该变量由编译器决定)
typedef 类型重命名

6.%0 八进制 %x十六进制 %% 输出%

7.volatile 保证内存的可见性;使得每次访问其修饰的变量都直接访问变量的内存;
1)多线程中,防止CPU(寄存器)保存变量的中间值;(副本)
2)防止编译器对volatile修饰的变量进行指令顺序的优化;
Eg: volatile const int num = 10; (后期可以直接改变num的值)

8.static 修饰的变量发生改变后,在当前函数结束后该变量依然存在,将修饰的变量放在静态存储区中;(一般变量的创建会放在栈里面,当当前函数调用完毕以后,函数结束,栈会将当前函数空间处理掉,但是static修饰的变量会放在静态全局区里面,函数结束该变量依然存在)

9.计算机中的变量存入内存中都是以“补码”的形式存储的:
正数:原码 = 反码 = 补码
负数:补码 = 原码取反加一,符号位不变

10.异或^ :同为0异为1(位运算符)
拓展题:运用位运算,实现两个数交换。
这里写图片描述
解题思路:三次异或运算;
Eg: a = 3 ====== 011 b = 5 =========101
第一次^ :a ^ b =====011 ^ 101 ========110 = a 将其赋给a
第二次^ :a ^ b =====110 ^ 101 ========011 = b 将其赋给b
第三次^ :a ^ b =====110 ^ 011 ========101 = a 将其赋给a

11.& ——–>二进制相当于乘,即按位与(位运算符)
拓展题:随便输入一个整数,将其转换成二进制,并且计算出1的个数;eg: 10 —–> 二进制: 1010 (一的个数为2)
这里写图片描述
解题思路:n = n&(n-1) 直到最终n变成0为止!
10 —–> 1010 9——> 1001 count = 0
1010 & 1001 ==== 1000——-> 8 7——->0111 count++
1000 & 0111 ==== 0000——->0 count++
n 为 0 ,循环退出,输出count == 2;
(每次循环都会干掉n最右边的那个1)
方法二:
这里写图片描述
(很明显可以看出第一种方法比第二种方法优化很多)

12.| ———> 按位或(位运算符)

13.>> ——–>二进制右移操作符(位运算)
① 逻辑移位:左边移进的位用0填充;
② 算术移位:左边移进的位由原值符号决定,符号位是几,用几填充
Eg: a << -3 其实是左移29位(32-3),并不是右移3位
(一个程序如果用了有符号数的右移操作,那么它就是不可移植的)

14.<< ——–>二进制左移操作符(位运算)(低位用0补齐)

15.~ 单目运算符,求补运算,即1变0, 0变1;

16.sscanf(字符串,“%d”,&d); //从前面那个字符串中读取整形放在d中
sprint(字符串,“%d”,d); //把格式化的数据写入某个字符串
Eg:
char* s = “I”;
char* t = “CSDN”;
sprintf(str, “%s love %s.”, s, t); //产生:”I love CSDN. ” 这字符串写到str中

17.指针:
① 指针在定义时必须初始化;
② 指针判空的时候用NULL;
指针:类型名 * 变量名 eg:int* p
1)直接访问:通过变量名的方式去访问;
2)间接访问:通过变量的地址去访问;
这里写图片描述
以此类推;

18.浮点数的比较不能用“等号”;

(未完待续)

(不喜勿喷,我们互相交流学习)

原创粉丝点击