如何在前端学习C语言时掌握数组和字节序转换技巧?
摘要:## 数组 本篇主要介绍:`一维二维数组`、`字符数组`、`数组名和初始化注意点`以及`字节序`。 ### 一维数组 #### 初始化 有以下几种方式对数组初始化: ```c定义一个有5个元素的数组,未初始化 int a[5];
数组
本篇主要介绍:一维二维数组、字符数组、数组名和初始化注意点以及字节序。
一维数组
初始化
有以下几种方式对数组初始化:
// 定义一个有5个元素的数组,未初始化
int a[5];
// 定义一个有5个元素的数组,将第一个初始化0,后面几个元素默认初始化为0
int a[5] = {0};
// 定义一个有5个元素的数组,5个元素都初始化为:2,3,4,5,6
int a[5] = {2, 3, 4, 5, 6};
// 【推荐】
// 和上一种在功能上是相同的。编译器会根据初始化列表中的元素个数(5个)自动确定数组a的大小为5
int a[] = {2,3,4,5,6};
Tip:以上写法创建的数组都是不可变大小的。
练习1
题目:int a[5] = {1},请问 a 的每个值是多少?
#include <stdio.h>
int main() {
// 将第一个初始化1,后面几个元素默认初始化为0
int a[5] = {1};
int i;
for (i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
return 0;
}
输出:1 0 0 0 0。
在C和C++中,当我们创建数组时,如果没有为数组的所有元素提供初始值,那么剩下未被初始化指定初始值的元素会被默认初始化。对于基本数据类型(如int、float、double等),默认情况下,未初始化的元素将被设置为0
练习2
题目:如果不对 a[5] 进行初始化,将输出什么?
#include <stdio.h>
int main() {
- int a[5] = {1};
+ int a[5];
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", a[i]);
}
return 0;
}
输出随机数:
开始运行...
4198784
0
4198464
0
-2014700240
运行结束。
练习3
题目:如果将int a[5]; 提到全局作用于中,输出什么?
#include <stdio.h>
int a[5];
int main() {
int i;
for(i = 0; i < 5; i++){
printf("%d ", a[i]);
}
return 0;
}
输出: 0 0 0 0 0
练习4
题目:这段代码有什么错误?
#include <stdio.h>
int main() {
int i = 10;
int a[i] = {0};
return 0;
}
运行:
开始运行...
# 不允许初始化可变大小的对象。即 i 是可变的。
/workspace/CProject-test/main.c:5:11: error: variable-sized object may not be initialized
int a[i] = {0};
^
1 error generated.
运行结束。
结论:数组长度不能是变量。
如果换成 #define 常量 还有问题吗?
#include <stdio.h>
#define i 10
int main() {
// int i = 10;
int a[i] = {0};
return 0;
}
如果换成 #define 常量就正常,前面我们知道 #define 是文本替换。
