C_04_数组学习

一维数组

步骤

1,声明

语法:

C 复制代码
extern 数据类型 数组名[长度];

注意:

  • 可有可无
  • 长度此时可以忽略不写

2,定义与初始化

  • 系统自动初始化
bash 复制代码
# 数据类型 数组名[长度];

​ 注意:

全局变量数组中的值为0

局部变量数组中的值为随机数

不建议使用

  • 部分初始化
bash 复制代码
# 数据类型 数组名[长度] = {值1,值2,值3,....};

​ 注意:

​ 此时值的个数小于长度

​ 将值从下标0的位置开始依次存储到数组中,剩余位置用0填充

特殊情况:将数组中所有数据制0

  • 全部初始化
bash 复制代码
数据类型 数组名[长度] = {值1,值2,值3,....};

​ 注意:

​ 此时值的个数等于长度,将值从下标0的位置开始依次存储到数组中

​ 此时长度可以忽略不写

  • 间隔初始化
C 复制代码
数据类型 数组名[长度] = {[下标] = 值,[下标] = 值,...};

​ 注意:

​ 将指定位置的元素修改为指定的值

不建议使用

注意:不能将一个数组赋值给另一个数组

3,使用

取值

bash 复制代码
#    数组名[下标]

存值

bash 复制代码
#   数组名[下标] = 值;

长度

int 长度 = sizeof(数组名) / sizeof(数组名[0]);

int 长度 = sizeof(数组名) / sizeof(数据类型);

遍历

将数组中的数据逐个取出

c 复制代码
for(int i = 0; i < len; i++)
{

  数组名[i];

}

二维数组

步骤

1,声明

语法:

bash 复制代码
#    extern 数据类型 数组名[长度];

			注意:

					1,	可有可无

					2,   长度此时可以忽略不写			

2,定义与初始化

2.1 全部初始化
bash 复制代码
									 方式A       
#数据类型 数组名[长度1][长度2] = {
#								{值1,值2,值3,...},
#								{值1,值2,值3,...},
#								{值1,值2,值3,...},
#								...
#							};		

									方式B 
#   数据类型 数组名[长度1][长度2] = {值1,值2,值3,...,值1,值2,值3,...,值1,值2,值3,...,...};

注意:
		1 	此时值的个数等于长度,将值从下标0的位置开始依次存储到数组中
		2 	此时长度可以忽略不写
2.2 部分初始化
bash 复制代码
#    间隔初始化   
数据类型 数组名[长度1][长度2] = {
									{值1,值2,值3,...},
									{值1,值2,值3,...},
									{值1,值2,值3,...},
									...
								};

#      部分初始化	
数据类型 数组名[长度1][长度2] = {值1,值2,值3,...,值1,值2,值3,...,值1,值2,值3,...,...};

注意:
		1	此时二维数组中一维数组的个数小于长度1 或一维数组中值的个数小于长度2

3 使用

c 复制代码
//取值
		数组名[下标1][下标2] 	获取数组中的某个元素
         		下标1:要获取的元素所在的一维数组在二维数组中的位置
                  下标2:要获取的元素在所在一维数组中的位置
     数组名[下标1]		 获取数组中的某个数组
                      					 注意:不能赋值给其他一维数组
// 存值	
		数组名[下标1][下标2] = 值;
//长度
	其中一维数组的个数
					int 长度 = sizeof(数组名) / sizeof(数组名[0]);
// 遍历:

for(int i = 0; i < 长度1; i++)
{
	for(int j = 0; j < 长度2; j++)
	{
		数组名[i][j]
	}
}

一维字符数组

c 复制代码
char str  [长度]	=	{'h','e','l','l','o','w','o','r','l','d'};
char str  [长度]	=	"helloworld";
注意:
	""的字符数组默认系统自带\0
	printf打印字符串时遇\0结束
	可以直接使用printf打印一维字符数组
不能使用printf打印其他一维数组

注意:

markdown 复制代码
>	scanf输入字符数组遇空格或回车结束

>	gets会导致数组下标越界

>	fgets建议使用

			fgets(数组名,sizeof(数组名),stdin);

二维字符数组

c 复制代码
char strs[][50] = {"张三","李四","王五"};
for(inti=0; i < sizeof(strs) / sizeof (strs[0]) ;i++){
		printf("%s\n",strs[i]);
}

数组与函数

数组作为参数

数组作为参数进行传递时,传递的是数组中第一个元素在内存中的地址

  • 64位机地址长度位 8 字节

  • 32位机地址长度位 4 字节

基本数据类型的变量传递的是值,数组传递的地址

数组作为返回值

其实就是返回会一个地址

但是因为返回值类型不能写数组,所以返回指针

注意:

局部变量随着所在函数的调用生成,随着所在函数的执行完毕而销毁

所以将局部变量的地址传递出来后,该局部变量被系统回收后,

该地址的值为空,此时使用该地址操作就好出现段错误

相关推荐
纵有疾風起1 分钟前
数据结构中的排序秘籍:从基础到进阶的全面解析
c语言·数据结构·算法·排序算法
夜猫逐梦1 小时前
【Lua】Windows 下编写 C 扩展模块:VS 编译与 Lua 调用全流程
c语言·windows·lua
_OP_CHEN2 小时前
数据结构(C语言篇):(十三)堆的应用
c语言·数据结构·二叉树·学习笔记·堆排序··top-k问题
量子炒饭大师3 小时前
收集飞花令碎片——C语言关键字typedef
c语言·c++·算法
cellurw3 小时前
Linux下C语言实现HTTP+SQLite3电子元器件查询系统
linux·c语言·http
..过云雨3 小时前
03.【Linux系统编程】基础开发工具1(yum软件安装、vim编辑器、编辑器gcc/g++)
linux·c语言·笔记·学习
青草地溪水旁4 小时前
Linux 高性能 I/O 事件通知机制的核心系统调用—— `epoll_ctl`
linux·c语言·c++
JasmineX-16 小时前
数据结构——顺序表(c语言笔记)
c语言·开发语言·数据结构·笔记
啟明起鸣7 小时前
【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
服务器·c语言·开发语言·网络·tcp/ip·udp
KarrySmile7 小时前
HOT100--Day23--153. 寻找旋转排序数组中的最小值,4. 寻找两个正序数组的中位数,20. 有效的括号
二分查找·数组··hot100·二分法·二分搜索·旋转排序数组