数组知识点(详解)

目录

数组

数组的概念

数组下标

数组的类型

求数组元素的个数

求数组的地址

一维数组

一维数组定义方式

一维数组下标

一维数组初始化

二维数组

二维数组的定义方式

二维数组的初始化

字符数组

字符数组的定义

字符数组的输入输出

 字符串其他函数


数组

数组的概念

数组:一组相同类型的元素集合。其中数组分为一维和多维,二维及二维以上都属于多维。

相同类型:指的是都是同一种数据类型

集合:可以存放一个至多个元素

数组下标

数组的下标都是由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的时候输出项是数组名,而不是数组元素名.

欢迎纠错!

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值