C语言教学-数据类型与结构篇②
本文最后更新于 221 天前,其中的信息可能已经有所发展或是发生改变。

数组

数组定义

数组是一组相同类型的值,按照顺序储存在一起。数组通过变量名后加方括号表示,方括号里面是数组的成员数量。

int scores[100];

上面示例声明了一个数组scores,里面包含100个成员,每个成员都是int类型。

数组赋值

数组的成员从0开始编号,比如说上面定义了一个int类型的数组scores,成员有100个,但我们选取的时候第一个成员是scores[0],第100是scores[100]。

数组名后面使用方括号指定编号,就可以引用该成员。也可以通过该方式,对该位置进行赋值。

scores[0] = 13;
scores[99] = 42;

数组也可以在声明时,使用大括号,同时对每一个成员赋值。

int a[5] = {22, 37, 3490, 18, 95};

数组初始化时,可以指定为哪些位置的成员赋值。

int a[15] = {[2] = 29, [9] = 7, [14] = 48};

上面示例中,数组的2号、9号、14号位置被赋值,其他位置的值都自动设为0。

多维数组

C 语言允许声明多个维度的数组,有多少个维度,就用多少个方括号,比如二维数组就使用两个方括号。

int board[10][10];

上面示例声明了一个二维数组,第一个维度有10个成员,第二个维度也有10个成员。

多维数组可以理解成,上层维度的每个成员本身就是一个数组。比如上例中,第一个维度的每个成员本身就是一个有10个成员的数组,因此整个二维数组共有100个成员(10 x 10 = 100)

跟一维数组一样,多维数组每个维度的第一个成员也是从0开始编号。

引用二维数组的每个成员时,需要使用两个方括号,同时指定两个维度。

board[0][0] = 13;
board[9][9] = 13;

变长数组

数组声明的时候,数组长度除了使用常量,也可以使用变量。这叫做变长数组(variable-length array,简称 VLA)。

int i = 10;
int a1[i];
int a2[i + 5];
int a3[i + k];

上面示例中,三个数组的长度都需要运行代码才能知道,编译器并不知道它们的长度,所以它们都是变长数组。

字符串

C 语言没有单独的字符串类型,字符串被当作字符数组,即char类型的数组。比如,字符串“Hello”是当作数组{'H', 'e', 'l', 'l', 'o'}处理的

编译器会给数组分配一段连续内存,所有字符储存在相邻的内存单元之中。在字符串结尾,C 语言会自动添加一个\0字符,表示字符串结束。字符\0不同于字符0,前者的 ASCII 码是0(二进制形式00000000),后者的 ASCII 码是48(二进制形式00110000)。所以,字符串“Hello”实际储存的数组是{'H', 'e', 'l', 'l', 'o', '\0'}

所有字符串的最后一个字符,都是\0。这样做的好处是,C 语言不需要知道字符串的长度,就可以读取内存里面的字符串,只要发现有一个字符是\0,那么就知道字符串结束了。

char localString[10];

上面示例声明了一个10个成员的字符数组,可以当作字符串。由于必须留一个位置给\0,所以最多只能容纳9个字符的字符串。

C 语言提供了一种简写法,双引号之中的字符,会被自动视为字符数组。

{'H', 'e', 'l', 'l', 'o', '\0'}
// 等价于
"Hello"

另一方面,即使双引号里面只有一个字符(比如"a"),也依然被处理成字符串(存储为2个字节),而不是字符'a'(存储为1个字节)。

如果字符串内部包含双引号,则该双引号需要使用反斜杠转义。

"She replied, \"It does.\""

C 语言允许合并多个字符串字面量,只要这些字符串之间没有间隔,或者只有空格,C 语言会将它们自动合并。

char greeting[50] = "Hello, ""how are you ""today!";
// 等同于
char greeting[50] = "Hello, how are you today!";

字符串变量的声明

由于字符数组的长度可以让编译器自动计算,所以声明时可以省略字符数组的长度。

char s[] = "Hello, world!";

字符数组的长度,可以大于字符串的实际长度。

字符数组的长度,可以大于字符串的实际长度。

上面示例中,字符数组s的长度是50,但是字符串“hello”的实际长度只有6(包含结尾符号\0),所以后面空出来的44个位置,都会被初始化为\0。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇