从“零”开始的C语言

https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5

C语言学习网

从“零”开始的C语言_第1张图片

const int

~  取反符号 如 a=~b   (按二进制位取反)

三目运算符  a=(b
局部变量都属于自动变量 所以在定义时 如
int 应为 auto int 但auto省略

enum  枚举

register寄存器   
register int  把变量定义成寄存器变量

typedef 类型定义   使用:
typedef unsigned int u-int
此时 unsigned int和 u-int 等效

define宏定义 
预处理指令: #define func(x) x*x
 int b , A=10;
b=func(A);
func()直接替换为后面的表达式 需要注意运算顺序  如
b=100/func(A)      此时b的值为100

指针所占的内存由系统决定。32位为4个字节,64位为8个字节。
 

从“零”开始的C语言_第2张图片

Else 和距离它最近的未成对的if匹配   故输出结果为空

即只判断一个if(a==1)

从“零”开始的C语言_第3张图片

Switch语句中  default和case 的顺序可以改变

二分查找

从“零”开始的C语言_第4张图片

从“零”开始的C语言_第5张图片

Goto简单用法

从“零”开始的C语言_第6张图片

Memset

从“零”开始的C语言_第7张图片

记录函数调用次数,注意:++的优先级要高于*

从“零”开始的C语言_第8张图片

Printf的返回值为其打印的数字个数

从“零”开始的C语言_第9张图片

从“零”开始的C语言_第10张图片

Stack Overflow - Where Developers Learn, Share, & Build Careers  程序员的知乎网站

简单地递归

从“零”开始的C语言_第11张图片

Strlen和sizeof   对同一个字符数组时,sizeof比strlen大1.

不使用第三个变量:交换a和b的值

1.a=a+b,b=a-b,a=a-b;  但是有一定的局限性,可能会存在数值溢出的情况。

2.a=a^b,b=a^b,a=a^b;  ^是异或运算。但是执行效率较低。

3.异或的规律:0^a=a,   a^a=0,   a^b^b=a(利用此规律寻找单个数字),

移位操作符:>>n左移n位(二进制)  右边补0

                          <

                          >>>无符号运算符  左边补0

&按位与 |按位或

统计num的补码中的数字1的个数

num的补码通过不断地右移位并且与1的方法计算

从“零”开始的C语言_第12张图片

Sizeof中的表达式不参与运算,因此s的值依然为0.

从“零”开始的C语言_第13张图片

输出结果为 1 2 3 4 

分析:a0a0时,后面的逻辑与之后的式子不在计算。

从“零”开始的C语言_第14张图片

下面的结果为2 2 3 4

a已经为真,后面的逻辑或也不再运算

从“零”开始的C语言_第15张图片

逗号表达式:结果为最后一个式子的值

从“零”开始的C语言_第16张图片

指针:允许指向数组元素的指针t与指问数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。

关于数组arrarr是数组首元素的地址  &arr[0]也是数组首元素的地址  &arr是整个数组的地址。

二级指针:

从“零”开始的C语言_第17张图片

指针数组:数组中的元素都是指针

从“零”开始的C语言_第18张图片

输出结果为11223300

从“零”开始的C语言_第19张图片

输出结果为  >

从“零”开始的C语言_第20张图片

I-1sizeof的返回值类型为无符号型,因此需要把-1转变为无符号型,即-1的补码比sizeof大得多。

从“零”开始的C语言_第21张图片

计算一个整数的二进制数字中的1的个数:

从“零”开始的C语言_第22张图片

从“零”开始的C语言_第23张图片

从“零”开始的C语言_第24张图片

结果为(1111111111111111111111111000000010

结果为255,数字为-1~-128127~0   0为字符0,即结束标志

从“零”开始的C语言_第25张图片

从“零”开始的C语言_第26张图片

指针数组:

从“零”开始的C语言_第27张图片

用数组指针打印二维数组:

从“零”开始的C语言_第28张图片

函数指针:

从“零”开始的C语言_第29张图片

函数指针数组:

从“零”开始的C语言_第30张图片

使用函数指针数组,减少代码的量

从“零”开始的C语言_第31张图片

从“零”开始的C语言_第32张图片

Strlen的返回值为无符号的int型,strlena-strlen(b)>=0

交换两个字符串

从“零”开始的C语言_第33张图片

Strcat函数:

将后一个字符串加到前一个字符串的末尾,前一个字符串的空间必须足够。

Strstr函数:

Strstrp1,p2)在p1中寻找p2,返回p1p2的位置,否则返回空指针。

Strtok函数:切割字符串

从“零”开始的C语言_第34张图片

Memcpy,可以拷贝数组,字符串等。

从“零”开始的C语言_第35张图片

Memmove:处理有重叠的拷贝的情况

从“零”开始的C语言_第36张图片

 Memset函数:初始化数组或字符串

 Memsetarr,初始化的内容,要初始化的大小)

位(二进制位)段:冒号(:)后面的数字所占的字节数。Int型每次开辟4个字节(32位),同时可以把abc放入。不足时再次开辟四个字节将d放入

从“零”开始的C语言_第37张图片

Char类型每次只开辟一个字节

从“零”开始的C语言_第38张图片

从“零”开始的C语言_第39张图片

Calloc函数同时可以初始化数组为0.malloc效率较高

从“零”开始的C语言_第40张图片

从“零”开始的C语言_第41张图片

Free时需要指针指向开辟内存的首地址,下面的示例是错误示例。

从“零”开始的C语言_第42张图片

Free后,指针不会被置为NULL

柔性数组:使用malloc调整数组大小。

从“零”开始的C语言_第43张图片

你可能感兴趣的:(c语言,开发语言)