一、数组的定义
1、定义
声明数组的类型
声明数组的元素个数(需要多少存储空间)
2、格式
元素类型 数组名[元素个数];
比如:int ages[3];
3、简单使用
简单初始化:int ages[5] = {19, 19, 20, 21, 25};
元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始
数组元素的访问:a[i]
4、初始化
初始化方式:
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};
常见错误:
int a[];
int[4] a;
int a[b];
a = {10, 11};
a[4] = {10,9,8,5};
5、内存分析
数组存储空间的大小
存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
数组名的作用,查看元素地址
数组越界的注意
二、二维数组
1、什么是二维数组
一个数组能表示一个班人的年龄,如果想表示很多班呢?
什么是二维数组?int ages[3][10]; 三个班,每个班10个人
相当于3行10列
相当于装着3个一维数组
二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
2、存储
存储大小
存储结构和顺序
存储地址问题
3、初始化
int a[3][4] = {1,2,3,4,5,6};
int a[3][4] = {{},{},{}};
数组元素简单访问
int a[][5] = {3,21,31,2,32,1};
注意错误:
int a[3][4];
a[3] = {};
三、字符串
1、什么是字符串
简单的字符串”itcast”
一个’i’是一个字符
很多个字符组合在一起就是字符串了
2、字符串的初始化
char a[] = “123”; 和 char a [] = {‘1’,’2’,’3’};的区别,可以比较大小
“123”其实是由’1’、’2’、’3’、’ ’组成
“123”的存储分布
字符串的输出”%s”,’ ’是不会输出的
3、 的作用
输出char a[] = {‘o’,’k’};
在char a[]前面搞个”cj”
输出”cj”
再输出a
char a[] = {‘i’,’t’,’ ’,’c’};
4、常用字符串处理函数
strlen(注意中文)
5、字符串常量、变量:
字符串常量(也叫字符串字面量),是用双引号扩起来的字符序列。如:
1 ”Hello World” 2 ”I’m a string literal.” 3 ”He was called “The NO.1”” //等等。(注意字符串中可能存在的转义序列)
存储字符串:
在C语言中,没有专门的字符串类型,通常使用字符数组来存放字符串;通常情况下,在不赋值的时候,字符数组中各个元素默认值为’ ’;在存储字符串时最好以空字符’ ’结尾。
字符串变量:
当声明用于存放字符串的字符数组时,始终要保证字符数组的长度比字符串的长度多一个字符,因为C语言规定每个字符串都要以空字符’ ’结尾。如果没有为空字符预留位置,可能会导致程序运行时出现不可预知的结果。系统字符串函数都是假设字符串是以空字符结束的。【我们可以规定一个字符串的长度,那么声明字符数组的长度就是这个规定长度+1(至少能存入字符串并能保存结尾空字符’ ’),至于字符串里最终存了多少字符,可以通过确定空字符’ ’的位置来确定】
初始化字符串变量:
1 char s[12] = {‘H’,’e’,’l’,’l’,’o’,’ ’,’W’,’o’,’r’,’l’,’d’,’0’}; 2 3 char s[12] = “Hello World”; //最后一位空字符’ ’结尾 4 5 char s[] = “Hello World”; //声明时忽略长度,编译器根据字符串长度自动分配空间(常用于字符串很长的情况)
C语言允许使用char *指针变量指向一个字符串:
1 char s[] = “Hello World”; //声明为字符数组 2 3 //char *s = s; 4 5 char *s = “Hello World”; //声明为字符指针,指针指向了H的首地址。
以上两种声明字符串的形式都可以,但是二者是有区别的:
1⃣️声明为数组时,s为数组名(首地址),可以修改数组中的元素字符;
2⃣️声明为指针时,s为指针变量,不可以直接修改指针变量内容(地址),除非指向其他字符串;
3⃣️如果需要修改字符串内容,那么我们就建立字符数组来存储字符串;字符指针变量并不会为字符串分配空间,他只能指向一个字符数组或者一个字符串常量;
6、字符串的输入输出:
- scanf()、printf()
- gets()、puts()
- 通过数组访问、指针访问方式,读取、访问字符串中的字符
//printf可以输出多个字符串,puts每次只能输出一个字符串,并且自动换行.
字符串输入scanf gets的区别:
相同:输入结束以后自动在结尾加 。
不同:scanf可以接受多个字符串,gets只可以接受一个字符串;gets可以接受空格、tab键。
7、C语言字符串库函数(#include <string.h>):
- strlen():求字符串长度
- strcpy():字符串拷贝
- strcat():字符串拼接
- strcmp():字符串ASCII顺序比较
1 //strlen():求字符串长度 2 char a[10] = {'x','y','