数组
数组初始化
int a[5] = {[2] = 3};
注意:数组和结构体不同,不能相互赋值
int a[5] = {1,2,};
int b[5] = a;//错误的
数组作为函数的参数时
int function(int array[5]);
查看编译预处理之后、预处理之前的代码
gcc -E main.c
字符串
字符串就相当于字符数组,所有的字符串最后一位都是’\0’
‘\0’就是ASCII码为0的NULL值
字符串是只读的
char c = "Hello world\n"[0];//c = 'H';
但是
"Hello world\n"[0] = ’A';
//编译器会报错说符串字面值是只读的,不允许修改
字符串在做右值使用时自动转换成指向首元素的指针,比如printf函数的具体实现里面第一个参数就是一个指针
printf("Hello");
其实就是传一个指针给printf
初始化字符串的时候记得要进行计算字符串结尾的NULL的长度,如果不计算这个长度,编译器也不会进行报错,对于后期debug会造成很大的麻烦
比如printf函数,当printf函数打印字符串的时候其实就是打印首字符到NULL字符之间的部分,一旦没有NULL字符,最后会出现数组越界的情况,后果可能很诡异
多维数组
char days[8][10] = { "", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday",
"Saturday", "Sunday" };