继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第4天 数组基础

慕桂英7474859
关注TA
已关注
手记 6
粉丝 4
获赞 0

课程名称: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 分别在编译器的细节不同

图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP