如何在前端学习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 是文本替换。
阅读全文