C语言小知识总结

1.int i,j,k = 0;
++i||++j&&++k == (1&&++i) || (++j&&++k)
++i&&++j||++k ==(1&&1)||(++k)

2.volatile修饰的变量每次都要到内存去取,防止优化。比如:
a = 100;sleep(100);b = a;
这种多线程的情况,sleep休眠的时间可能a的值已经改变了,如果没加volatile,依旧会给b赋值100。常用于并行设备的硬件寄存器(如状态寄存器),在中断程序中访问的全局变量,多线程中几个任务的共享变量。

3.数组的地址包括了数组的首地址和数组的长度。

4.const:限定一个值不能被改变,之歌值为常量,只读不写。
const int *p 、int const *p都是常量指针,*号在const后是一个指针。指向一个常量。指针的值无法改变; int * const p 指针常量 *在const前。是一个常量,常量里存的指针,因此指针的指向不能变。

5.int strlen( char *string);
int strlen( char string[]);
一维数组的函数原型是相等的。

6.int data[3][10]
fun(data)的函数原型为
void fun(int (*data)[10]);
或者void fun(int data[][10]);
必须知道第2个及以后各维的长度才能对各下标进行求值,因此在原型中必须声明这些维的长度。第1维的长度并不需要,因为在计算下标值时用不到它。(可以没有行但必须要有列)

7.strlen 字符串长度
strcpy 复制字符串
strcat 连接字符串
strstr 查找是否包含有子串
strcmp 比较字符串:相同返回0,s1 strchr 在一个字符串中查找一个字符。(strrchr返回最后一次出现的位置)
strpbrk 依次检验字符串str1中的字符,当被检验字符在字符串str2中也包含时,则停止检验,并返回该字符位置。

8.int a;
int *a;一个整型指针
int **a;指向指针的指针,该指针指向一个整型数
int a[10];
int *a[10];指针数组,存放指针的数组,该数组有十个指向整型数的指针
int *(a)[10];数组指针,指向数组的指针,该数组有十个整型数
int *(a)(int a);函数指针,指向函数的指针,该函数有一个整型参数并且返回一个整型值
int (*a[10] (int));一个有十个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型值

int *f();//指针函数,函数的返回值是一个指向整型的指针
int (*)f();//函数指针,指向的函数返回一个整型值

9.结构体与联合体
结构体各成员拥有自己的内存空间,内存对齐,大小为总长度之和。
联合体共用一块内存空间,大小为最大成员变量并且满足所有成员变量类型大小的整数倍。

10.static
修饰局部变量:改变存储方式,维持上一次的值
修饰全局变量:改变作用域,该变量只能在该模块使用
修饰函数:该函数只能在该模块使用

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