十八般兵器(六)

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; 
}
发布了26 篇原创文章 · 获赞 3 · 访问量 1548

猜你喜欢

转载自blog.csdn.net/qq_34850023/article/details/104468443