C语言杂记 0x06

数组

数组初始化

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" };

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ahzahz/article/details/81062624