一、一维数组
二、字符串数组
一、一维数组
1.1、定义一维数组
1.1.1、一般形式为:类型符 数组名[常量表达式],如:int a[n]
说明:(1)数组名的命名规则遵循标识符命名规则
(2)数组下标从0开始,如a[10]下标为0-9,不存在a[10]
(3)C语言规定,常量表达式不允许做动态定义,如下面这样定义数组是不允许的,数组的大小不能依赖于程序运行过程中变量的值
int n;
scanf("%d",&n);
int a[n];
1.2、引用一维数组
1.2.1、引用数组的表示形式
数组名[下标],如a[0]
表示数组序号为0的元素
注意:引用数组只能引用数组元素,而不能一次整体调用整个数组全部元素的值
1.2.2、一维数组的初始化
(1)在定义数组时对全部数组元素赋予初值:
int a[10] = {0,1,2,3,4,5,6,7,8,9};
(2)可以只给数组中的一部分元素赋值:
int a[10] = {0,1,2,3,4};
系统给未赋值的元素赋初值为0
(3)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度:
int a[5] = {1,2,3,4,5};等价于int a[] = {1,2,3,4,5}
虽然没有指定长度,但是系统会根据花括号中的数据个数自动确定a数组有5个元素
二、字符数组
2.1、定义字符数组,与定义数值型数组类似:
char c[10] = {'a','b','c'};
需要注意的是字符型数据是以ASCII码的形式存放的,因此也可以用整型数组来存放字符,如:int c[10] = {'a','b','c'};
是合法的,但是浪费存储空间
2.2、字符串和字符串的结束标志
2.2.1、C语言中,是将字符串作为字符数组来处理的
2.2.2、以字符’\0’作为字符串的结束标志
#include <stdio.h>
int main()
{
int i;
char c[5] = {'a','b','\0','c','d'};
printf("%s",c);
printf("\n");
}
//输出为ab
2.3、字符数组的输入输出
2.3.1、单个字符输入输出
int i;
char c[5] = {'a','b','c','d','e'};
for(i = 0;i < 5;i++)
{
printf("%c",c[i]);
}
//输出为abcde
2.3.2、将整个字符串一次输入或输出
#include <stdio.h>
int main()
{
int i;
char c[5];
scanf("%s",c);
for(i = 0;i < 5;i++)
{
printf("%c ",c[i]);
}
printf("\n");
printf("%s\n",c);
}
注意:scanf无法录入空格
2.4、使用字符串处理函数
2.4.1、puts函数——输出字符串的函数
char str[] = {"china"};
puts(str);
//输出china
2.4.2、gets函数——输入字符串的函数
gets(str);
//可以输入空格
2.4.3、strlen函数——测字符串长度的函数
char str[10] = "China"
printf("%d\\n",strlen(str));
//输出为5
2.4.4、strcat函数——字符串连接函数
char a[100] = {"abcd"};
char b[] = {"efgh"};
printf("%s\n",strcat(a,b));
//输出为abcdefgh
注意:strcat的作用是把b字符串接到a字符串后面,结果放到a中,所以a一定要足够大
2.4.5、strcpy和strncpy函数——字符串复制函数
char a[10] = {"abcd"};
char b[] = {"efgh"};
char c[] = {"ijkl"};
printf("%s\n",strcpy(a,b));//输出efgh,将b复制给a并替换a中原有的字符串
printf("%s\n",strncpy(a,c,2));//输出ijgh,将c中的前两个字符复制给a中的前两个字符
注意:(1)a字符必须足够大容纳b字符
(2)复制完后的结果是放到a字符中
(3)使用strncpy注意复制的字符个数n应小于本身长度且小于a的长度
2.4.6、strcmp函数——字符串比较函数
char a[] = {"abcd"};
char b[] = {"efgh"};
printf("%d\n",strcmp(a,b));
//输出-1
注意:(1)以第1对不相同的字符的比较结果为准
(2)如果a=b,返回0
(3)如果a>b,返回1
(4)如果a<b,返回-1