目录
数组
数组的概念
数组:一组相同类型的元素集合。其中数组分为一维和多维,二维及二维以上都属于多维。
相同类型:指的是都是同一种数据类型
集合:可以存放一个至多个元素
数组下标
数组的下标都是由0开始的;
int a[10]表示该数组有10个元素;
因为数组的下标是由0开始的,所以这10个元素的下标表示是从a[0]~a[9],不存在a[10]
数组的类型
数组也是有类型的,他算是一种自定义类型;
数组的类型就是去掉其数组名得到其数组类型。
例:int arr[10]
arr 是他的数组名;
该数组的类型就是去掉其数组名也就是arr得到其数组类型;
int [10] 就是他的数组类型;
int 是该数组元素的类型。
注意:数组的类型和数组元素的类型是不一样的
求数组元素的个数
计算数组的个数可以用sizeof,以%zd的格式输出
int main()
{
int arr[10];
printf("%zd\n", sizeof(arr));//计算总数组大小,单位是字节
//int占用4个字节,arr大小是40
printf("%zd\n", sizeof(arr[0]));//计算单个数组元素大小,为4
printf("%zd\n", sizeof(arr) / sizeof(arr[0]));//计算数组个数,为10
return 0;
}
求数组的地址
求数组的地址可以以%p来求,%p是以16进制的形式输出
int main()
{
int arr[10];
printf("%p\n", &arr);
printf("%p\n", &arr[0]);
printf("%p\n", &arr[1]);
printf("%p\n", &arr[0]+1);
printf("%p\n", &arr[1]+1);
printf("%p\n", &arr[2]);
printf("%p\n", &arr + 1);
return 0;
}
从上面可以看出数组是连续存放的
以及数组名就是数组的首地址
不要忘记加上取值符&
一维数组
一维数组定义方式
类型符 数组名[常量表达式];
int a[10] 其中10代表数组的大小;
a[2+1],a[2*3],a[5/2]这些也都是符合的.
一维数组下标
数组的下标都是由0开始的;
int a[10]表示该数组有10个元素;
因为数组的下标是由0开始的,所以这10个元素的下标是从a[0]~a[9],不存在a[10].
一维数组初始化
int main()
{
int a[10];//未初始化
int a[10] = { 0 };//不完全初始化,10个元素的初始值全为0
int a[10] = { 1,3,5,7,9 };//不完全初始化,后面5个元素的初始值为0
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
//如果所定义的数组长度与初始化的数据个数相同,则可以不写定义长度
return 0;
}
二维数组
二维数组的定义方式
类型名 数组名[常量表达式(行)][常量表达式(列)]
int a[3][4],a[2-1][2*2-1],b[1][3]=a[2][3]/3这些都是可以的
二维数组的初始化
int main()
{
//未初始化
int a[3][4];
//不完全初始化
int a[3][4] = { 0 };//元素都为0
int a[3][4] = { 1,2,3,4 };//剩下的元素都为0
int a[3][4] = { {1},{2,0,1} };//与下面等同
//等同 { {1,0,0,0},{2,0,1,0},{0,0,0,0} };
//二维数组可以省行不能省列
int a[][3] = { 1,2,3,4,5,6,7 };//三行
//等同 { {1,2,3},{4,5,6},{7,0,0} };
int a[3][] = { 1,2,3,5,6,7 };//错误示范,不能准确的确定有几列
//完全初始化
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };//完全初始化,更优化
return 0;
}
字符数组
字符数组的定义
在C语言中,是将字符串作为字符数组来处理的
对字符:char c[10]={'a','b','c','d'}
对字符串:char c[10]={"abcd"},他与char c[10]={'a','b','c','d','\0'}是等价的
区别:字符串会多一个'\0'作为结束语句
字符数组的输入输出
格式声明:
%c:逐个字符的输入输出
%s:对字符串的输入输出
输入输出函数
gets:输入字符串函数,形式:gets(数组名)
puts:输出字符串函数,形式:puts(数组名)
字符串其他函数
strlen:测字符串长度//他与sizeof的区别就是他的实际长度不包括'\0';
strcpy:将字符串复制到数组中,形式:strcpy(字符数组,字符串);
strcmp:字符串之间的比较,从左到右逐个字符比较(按ASCII码值大小比较)
形式:strcmp(字符串1,字符串2);
strlwr:将大写字符转为小写;
strupr:将小写字符转为大写;
strcat:将两个字符串连接;形式:strcat(字符数组1,字符数组2).
注意:1.使用字符串函数时开头要用#include<string.h> ;
2.在scanf函数中的输入如果是字符数组名,不要在加取值符&,因为数组名代表数组的起始位置
scanf(“%s”,&str)是错误的;
3.用%s输出的是字符串,用printf的时候输出项是数组名,而不是数组元素名.
欢迎纠错!