数组的内存是连续的
这一点其实就是为什么数组比链表访问更快了。链表往往是在内存中随机分布的,通过指针索引。
Cpu在计算时,会有一部分数据缓存在cache中,数组由于连续,损耗可预计(能不能装的下),就别写进缓存中
下次寻址的时候就快了。链表呢,随机存储就不是很方便载入缓存了
另外,C语言只有静态数组,没有动态数组,无他,高效尔。
数组初始化
一维
int a[8] = {1,2,3,4,5}; 全部初始化只能这么写
如果已知长度可以省略长度int a[] = {1,2,3,4,5};
- 当初始化的元素不够的话,会用0填充
- 对于整形:用0填充
- 对于字符串:用'\0'填充
- 对于float、double 用0.0填充
二维
int[2][2] = {{1,1},{1,1}} 和 int[2][2] = {1,1,1,1}等价
字符串数组
C语言中没有string,所以用char str[4] = "abc";* C语言中默认字符串是'\0'结束的。
所以"abc"的长度是4,strlen(str)结果是3,是因为他也是遇见'\0'结束的。
char str[3] = "abc" 是会报错的
字符串连接
strcat(arr1,arr2)作用:strcat() 将把 arr2 连接到 arr1后面,并删除原来 arr1 最后的结束标志'\0'。
字符串复制
strcpy(arr1,arr2)作用:strcpy() 会把 arr2中的字符串拷贝到 arr1 中,字符串结束标志'\0'也一同拷贝。
字符串比较
strcmp(arr1, arr2)
作用:字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。
返回值:若 arr1和 arr2相同,则返回0;若 arr1大于 arr2,则返回大于 0 的值;若 arr1小于 arr2,则返回小于0 的值。
浙公网安备 33010602011771号