C语言基础 - char字符串数组的概念和定义
在c语言中,字符串是以“字符数组”存储的。
#include <stdio.h> #include <Windows.h> int main(void) { char name[32]; // C语言风格的字符串 // 相当于C++风格的: printf("请输入你的名字: "); // cout << "请输入你的名字: " << endl; scanf_s("%s", name, 32); // cin >> name; printf("你好, %s ", name); // cout << "你好, " << name << endl; system("pause"); return 0; }
数组的概念和定义
-
什么是数组 数组,就是多个元素的有序“组合”。
生活中的“数组”:
-
由多个相同大小的"柜子"组成, 这些"柜子"都有自己唯一的编号 而且"柜子"的编号都是递增顺序
C和C++语言中的数组:
- 由多个大小相同的小柜子组成 => 相同大小的内存块组成,即相同类型的数据
- 这些小柜子,有自己对应的编号 => 编号从0开始递增
- 而且这些编号是递增顺序。
- 数组的“容量”是不能改变的。
数组的定义
数组和其他变量一样,需要先定义,再使用。
-
实例: int a[8]; //定义了一个数组, //数组名是“a”, //包含8个元素, //每个元素是int类型的变量 说明: 定义了如下数组: int a[8]; 就相当于定义了8个int类型的变量 而且这8个变量是连续存储在内存中的。(8个依次相连的邻居)
数组的初始化
数组的初始化 在定义数组的同时,设置数组内的元素值。
int a[5] = { 20, 5, 30, 13, 18}; printf("%d, %d, %d, %d, %d ", a[0], a[1], a[2], a[3], a[4]); //或者 cout << a[0] << “,” << a[1] << “,” << a[2] << “,” << a[3] << “,” << a[4]; int a[5] = { 0}; //把数组的所有元素都初始化为0 printf("%d, %d, %d, %d, %d ", a[0],a[1],a[2],a[3],a[4]); int a[5] = { 1}; //把a[0]初始化为1,其它值都初始化为0 int b[5] = { 1, 5}; //把a[0]初始化为1,a[1]初始化为5,其它值都初始化为0 int a[] = { 1,2,5}; //定义数组a, 这个数组包含3个元素! // 根据“初始化列表”,自动计算数组的容量 //高逼格用法(在某些特殊场合使用) //优点:但数组的成员较多时,该方式可读性高 //缺点:仅仅C编译器支持,C++编译器中不支持,即C++程序中不能使用。 int a[5] = { //只初始化指定下标的成员 [1] = 1, //a[1] = 1 [3] = 2, //a[3] = 2 //没有指定的成员,被初始化为0 };
常见错误
int a[2] = { 1,2,5}; //错误!初始值太多,大于数组的容量 int a[3]; a = { 1, 2, 3}; //不能对数组名直接赋值! int a[3]; a[3] = 10; //下标越界!下标的取值范围是 0, 1, 2
数组元素的访问
-
数组的内元素的访问 通过下标访问对应的元素。 特别注意, 数组的第一个元素的下标是0, 而不是1
int age[10]; //10个人的年龄 a[5] = 20; //把第6个人年龄赋值为20岁 printf(“%d ”, a[5]); // 或者cout << a[5];
另类用法: 使用下标的方式访问string字符串(不推荐使用此方法)
string name = "camel"; // 可以使用数组下标的方式来访问对应的数据 for (int i = 0; i < name.length(); i++) { cout << name[i]; } cout << endl; //把首小写字母c, 换成大写字母C name[0] = C; cout << name << endl;
数组的越界
-
数组的越界, 是指下标超出正常的范围! 例如: int a[10]; //a[-1] 和 a[10]都是越界! 越界的后果 越界非常危险,可能导致数据破坏,或其他不可预期的后果! 越界的控制 需要程序员自己手动控制,编译器不做任何检查!因为,C/C++语言完全信任程序员!
下一篇:
认识网络爬虫基本概念