【学习打卡】第4天 数组基础
2022/8/8 3:22:51
本文主要是介绍【学习打卡】第4天 数组基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称:C语言系统化精讲 重塑编程思想 打造坚实的开发基础
课程章节:第六章 玩转数组
授课老师:bennyhuo
课程内容
数组基础
数组就是一组相同类型的数,并从下标 0 开始索引。可以用如下三种方式赋值
int array[ARRAY_SIZE]; // 1. for 循环赋值 for( int i = 0 ; i < ARRAY_SIZE ; ++i){ array[i] = i; } // 2. 初始化列表赋值 double array_2[ARRAY_SIZE] = {0, 1, 2, 3}; // 3. C99 开始支持的特性 , 特定元素赋值 char array_char = {[2] = 'o'}; // char array_char[ARRAY_SIZE] = {[2] = '0' ,'l' ,'l'} // 即从 索引2 开始赋值 为'0' 'l' 'l'
auto
变量在 msvc 中未开辟的数组中初值一般为 0xCCCCCCC
, 而在 gcc
中则不会做操作,完全取决于之前运行过该内存值为多少。故在 C 中一定要给数组赋初值。
而 static
则均为 0 。
数组的边界
C语言中数组不是边界安全的, 对数组进行越界的访问,等价于指针往后移,在编译时是不会报错,也不会检查。
只有在运行时才会报错。
而 C 语言不进行检查的原因是,只要程序员足够聪明,他是不会越界的,美其名曰 :相信程序员的设计哲学
- 总之,在C语言中要时刻记得检查内存边界。只要程序员自己检查,那么程序本身效率就会提高。
而我们在C 语言中有时会进行 如 array[var] 的操作,这是在C99 之后支持的(即VLA),也就是说在C90 中,程序员只能写常量访问,那么自然就会进行检查。
虽然如此,但在 C90 中 ,gcc 也对VLA 也做了支持,而 msvc 则不行。
字符串
而 C语言中字符串 和 字符数组大致相同,但字符串是以 \0 (0x00)
结尾。故单纯的字符数组需以0结尾才能 以 %s
格式化输出。
//字符数组 char char_vec[11] = "Hello World"; //字符串 char string[12] = "Hello Wolrd"; //也可以不写长度,中文gcc 默认用 utf8、msvc 默认为 gbk 编码 char string[] = "你好,中国" ; // 宽字符,则为unicode wchar_t ws[] = L"你好,中国" ;
数组类型参数
在 C中,传递数组等价于传 数组的地址,或者说仅传了一个指针。要想完成变长数组的传参,只能将参数一同传上去:
int SumArray(int array[] , int length) //在leetcode 题目中,可以经常看到这种api 的撰写。
课程收获
- 了解了C99 支持的新赋值方法
- 知道了以前写出来
烫
的原因,即未初始化
或者越界访问
- 了解了语言中 的VLA 概念
- 了解了 utf8 和 gbk 分别在编译器的细节不同
这篇关于【学习打卡】第4天 数组基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)