数组基本常识

char arr[]={0}; //正确 char arr[]=" "; //正确 char arr[10]=" "; char arr[10]; //正确 char arr[]; //错误 总结:数组若想表达无误 1.初始化数组给不给大小都可以 2.若没有初始化则一定要给出数组大小 ~:~号是对一个数值按位取反 ~0 (int型4个字节32个bit位) =~00000000000000000000000000000000 = 11111111111111111111111111111111 =-1 //复数在内存中存储的是二进制的补码,最高位为符号位0为正1为负 而打印的是这个数的原码 计算公式:原码符号位不变其余按位取反得到反码,反码+1变成补码 因为存储为补码只需要上述过程逆序即可得到原码最终打印出来 11111111111111111111111111111111(补码)-1 =11111111111111111111111111111110(反码)符号位不变其余位按位取反 =1000000000000000000000000001(原码) =-1(输出结果) 示例: ~5 =~00000000000000000000000000000101 =11111111111111111111111111111010(补码) =11111111111111111111111111111001(反码) =10000000000000000000000000000110(原码) =-6

++和--: ++i(先+) ++i(后加) #include <stdio.h>

int main(){ int i=0; printf("%d\n", i); //0 printf("%d\n", ++i); //1 printf("%d\n", i); //1 printf("%d\n", i++); //1 printf("%d\n", i); //2 return 0; } 强制类型转换: int i = (int)3.14; //前后类型要一致 && ||和 & |区别: &&和||为逻辑符号: 3&&2=1; 0&&2=0; 3||2=1; 3||0=1; &和|为计算符号: 3&2=0011&0010=0010=2 三目运算符: (1)?(2):(3)//若(1)为真那么(2)若(1)为假那么(3) num=(1<2)?1:2;//num为1 例如: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 2; (a == 2) ? (a = 4) : (a = 10); printf("%d\n", a); //输出为4 return 0; } #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 3; (a == 2) ? (a = 4) : (a = 10); printf("%d\n", a); //输出为10 return 0; }

register关键字

用法: register int a = 10; //建议把a定义成寄存器变量(寄存器运行速度快远大于内存)建议是因为寄存器空间有限需要选择

typedef关键字(类型定义/类型重定义)

如定义一个无符号整型变量: unsigned int num = 10; 但是感觉unsigned int 太长了,太麻烦了可以使用typedef重定义 用法: typedef unsigned int u_int;//这样就把unsigned int 变成 u_int unsigned int num = 10;等价于u_int num=10; 注意: 新定义的一定是一个单词 u_int 不可以是 u int (两个单词)

static关键字

将一个变量或函数变为静态 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void test(){ int a = 10; ++a; printf("%d\n", a); } int main() { int i = 0; while (i < 5){ test(); ++i; } return 0; } 结果为五个11 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void test(){ static int a = 10; ++a; printf("%d\n", a); } int main() { int i = 0; while (i < 5){ test(); ++i; } return 0; } 结果为11 12 13 14 15 结论:当static修饰局部变量时此变量周期变长了 即在此调用函数时此变量的值不变不会被重新初始化

extern函数

用法: extern int a;//a为其他.c文件的全局变量(static修饰全局变量) 但若此时a为static int a = 10;则其他文件中主函数就不能不能extern(继承)这个外部变量。 static修饰函数也一样和变量一样。 extern声明外部函数: extern int hanshu(int , int);//在哪里声明都行只要在调用前,main里外都行。

define定义常量和宏

#define MAX 100(常量) #define MAX(X,Y) ((X>Y)?X:Y)(宏)//MAX(X,Y)就等价于后边的三目运算表达式且不需要规定参数类型