C 语言风格的字符串—— char 数组
在 c 语言中,字符串是以“字符数组”存储的,来看看下面代码。
#include <iostream>
#include <Windows.h>
#include <stdio.h>
using namespace std;
int main(void) {
//C 语言风格的字符串
char name[32];
/*使用 C 语言的函数,来处理 C 语言字符串
printf("请输入您的名字:");
scanf("%s", name);
printf("%s, 你好!\n", name);
*/
// 使用 C++的方式,来处理 C 语言字符串
cout << "请输入您的名字:";
cin >> name;
cout << name << ",你好!" << endl;
system("pause");
return 0;
}
看完上面的代码,那少侠你一定有疑问了,什么是数组?
数组你可以理解为是超市门口的储存柜:
(1)由多个大小相同的小柜子组成
(2)这些小柜子,有自己对应的编号
(3)而且这些编号是递增顺序。
如果现在你脑袋里有了储存柜的画面那么我们现在转回到C/C++里来对比一下它们的相同之处:
C 和 C++语言中的数组:
1)由多个大小相同的小柜子组成 => 相同大小的内存块组成,即相同类型的数据
2)这些小柜子,有自己对应的编号 => 编号从 0 开始递增
3)而且这些编号是递增顺序。
注意:数组的“容量”一旦定义是不能改变的。
数组的定义
数组和其他变量一样,需要先定义,再使用。
例:
int a[8];
//这里我们定义了一个数组
//数组的名字是 a
//数组有八个元素,也就是有八个小柜子
//每个元素的类型都是 int类型
数组的初始化
在定义数组的同时,设置数组内的元素值
int a[8] = {20, 5, 30, 13, 18};
printf("%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4]);
或者
cout << a[0] << “,” << a[1] << “,” << a[2] << “,” << a[3] << “,” << a[4];
int a[8] = {0}; //把数组的所有元素都初始化为 0
printf("%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4]);
int a[8] = {1}; //把 a[0]初始化为 1,其它值都初始化为 0
int b[8] = {1, 5}; //把 a[0]初始化为 1,a[1]初始化为 5,其它值都初始化为 0
int a[ ] = {1,2,5}; //定义数组 a, 这个数组包含 3 个元素
// 根据“初始化列表”,自动计算数组的容量
还有一种特殊的方法:只能在C语言编译器下通过,C++不能
int a[7] = {
[2] = 1; //a[2]初始化为1
[4] = 2; //a[4]初始化为2
//其他元素初始化为0
}
数组元素的访问
通过下标访问对应的元素。
特别注意, 数组的第一个元素的下标是 0, 而不是 1
int a[10]; //定义
a[5] = 38; //对a[5]赋初值
printf(“%d\n”, a[5]);
或者
cout << a[5];
数组的越界
数组的越界, 是指下标超出正常的范围!
例:
int a[10]; //a[-1] 和 a[10]都是越界!
//越界非常危险,可能导致数据破坏,或其他不可预期的后果!
C 语言字符串的存储、初始化
char Today[10];
Today[0] = 'h';
Today[1] = 'a';
Today[2] = 'p';
Today[3] = 'p';
Today[4] = 'y';
Today[5] = 0; //相当于字符串结束符'\0'
printf("%s",Today); //输出happy
printf("%d",sizeof(Today)); //sizeof计算Today所占字节数,结果为 6
//即使没有初始化Today[5] = 0;也会输出 6 ,C语言编译程序会自动补加结束符
C 语言字符串的输入输出
#include <stdio.h>
#include <Windows.h>
int main(void) {
char name[16];
char addr[64];
printf("姑娘芳名?\n");
scanf("%s", name);
//此时输入缓冲区中还有一个回车符
//清空输入缓冲区
//可以试试删除这一句,康康会发生什么
fflush(stdin);
printf("姑娘家住何地?\n");
gets(addr); //读一行,包括一行中的空格
printf("家住%s 的%s, 我中意你!\n", addr, name);
system("pause");
return 0;
}