数组学习笔记

前言

在使用计算机对数据进行处理时,硬件具有相同数据类型的数据量河大(如全班同学的成绩等),对于这种需要数据量非常大的程序,需要把同一类型的数据按一定形式有序地组织起来,这有序存储数据地集合为数组。
其结构:
在这里插入图片描述

  • 数组用于存储一组数据
  • 数组里面存储的数据类型必须是相同的
  • 数组在内存中会开辟一块连续的空间

定义数组表明:

  • 数组元素的类型
  • 数组元素的总个数

注意 :在C中,数组的下标是从0开始!

一、🍒一维数组

①、一维数组:数组元素只有一个下标的组数。
②、一维数组定义:

在这里插入图片描述在这里插入图片描述

如:

int a[5];//定义一个名为a的数组,数组中的每一个元素都是int类型,一共有10个元素
//每一个元素都保存在一个变量中,每一个变量都由数组名和数组下标组成
并且都是从0开始的,分别是a[0] a[1]....a[4]

也可以用宏定义#definr
#define a 9
....
 int i[a];
③、所需要的内存字节数

在这里插入图片描述

④、数组的引用

在这里插入图片描述
在这里插入图片描述

int i[9];    //定义数组,且长度为9
a = i[9];    //引用数组i中数组为9的值,赋值给a,9代表的是数组下标
⑤、一维数组的初始化

在这里插入图片描述

  • 如果不初始化,直接使用数组会是随机值
#include <stdio.h>

void main()
{
	int c[4];
	
	printf("%d\n", c[0]);
	printf("%d\n", c[1]);
	printf("%d\n", c[2]);
	printf("%d\n", c[3]);
	 
}

在这里插入图片描述

  • 在定义数组时——直接对全部数组元素赋初值
int i, a[6]={1, 2, 3, 4, 5, 6};
  • 可以只给一部分元素赋值,没有赋值的元素默认值为0 —— 部分初始化
inr a[6] ={10, 20, 30};
  • 在对全部数组元素赋初值,可不指定数组长度,系统会自动分配
int a[]={10, 20, 30, 40, 50};
void main()
{
	int a[10];
	//如果定义数组的同时 赋值(初始化),可以不指定数组元素的个数 
	int b[] = {1, 2, 3}; 
	
	//通过sizeof来获取数组大小
	
	printf("sizeof(a) = %d\n", sizeof(a)) ;
	printf("sizeof(b) = %d\n",sizeof(b));
}

##### ⑥、
注意点&注意事项
注意点

  • 数组名不允许与其他变量名相同
  • 定义数组尾部需要添加分号;
  • []中括号内不要使用动态定义。
    在这里插入图片描述
    注意事项:
  • 一维数组赋值时,只能逐个赋值,不能给数组整体赋值
  • 若初值的类型与数组元素不一致,则把初值类型转换为数组元素类型
  • 避免数组越界
    在这里插入图片描述

二、🍒二维数组

二维数组的生活例子:学校的课程表,公司工资表

①、表示形式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在C中,二维数组是按行排列,先存放a[0]行内所有数组元素,再存放a[1]行内的所有数组元素。

int a[2][2];
即:
a[0][0] a[0][1]
a[1][0] a[1][1]

在这里插入图片描述

注意
二维数组也是连续开辟空间,访问元素的行和列都是从0开始
在初始化时行数可以省略,列数不能省略

②、引用:

在这里插入图片描述

③、初始化:
  • 按行连续赋值
int a[2][2]={1, 2, 3, 4};
即:
{12 
 34}
  • 赋值省略行下标,不可省略列下标
int a[][3]= {1, 2, 3, 4, 5, 6}
  • 按行分段赋值
    在分行赋值,可以对部分元素赋值,没有初始化的部分自动为 0。部分初始化
int a[2][3]={{1, 2, 3}, {4, 5, 6}};
int a[2][3]={{1, 2},{4,,5}};
  • 可对数组元素赋值,逐个初始化
int a[2][3];
a[0][0] = 1;

void main()
{
	int c[2][4];
	//二维数组的行数可以省略,但是列数不能省略,在初始化可以这样子操作
	//系统会根据列数自动指定行数,最终得到的函数所得的元素个数是列的整数倍。 
	int d[][4] = {1,2,3,4,5};
	
	printf("sizeof(c) = %d\n", sizeof(c)) ;
	printf("sizeof(d) = %d\n",sizeof(d)); 
} 

在这里插入图片描述

补充:一二维数组的遍历

#include <stdio.h>

void main()
{
	//一维数组的遍历
	int a[6] = {111, 222, 333, 444, 555, 666};
	a[3] = 999;
	
	int i;
	for(i = 0; i < sizeof(a) / sizeof(int); i++)
	{
		printf("%d\n", a[i]);
	} 
	 
	//二维数组的遍历
	int b[3][4] = {1, 2, 3, 4,
					5, 6, 7, 8,
					9, 10, 11, 12} ;
	
	b[2][0] = 666; 
	int m, n;
	for(m = 0; m < 3; m++)
	{
		for(n = 0; n < 4; n++)
		{
			printf(" %d ", b[m][n]);
		}
		printf("\n");
	}
}

在这里插入图片描述

三、🍒字符数组

①、定义 & 引用:

在这里插入图片描述

定义:
 char c[2];
引用:
 c[0]='A';
 C[1]='e'; 
②、初始化:
  • 逐个字符赋给数组

  • 定义字符数组时进行初始化,看省略数组长度

  • 字符串给字符数组赋初值

char c[2]= {'a','b'};
char c[]= {'a','b'};
char c[]={"ab"};
③、字符数组结束标志:’\0’

用字符串方式赋值要比用字符逐个赋值要多占1,字符数组保存字符串以 ’ \0 '作为串结束符。这样使得数组长度要+1
在这里插入图片描述

④、字符数组的输出
  • 使用‘%c’输出
  • 使用‘%s’输出
使用‘%c’输出
  for(i = 0; i < 5; i++)
  {
     printf("%c", c[i]);
  }
使用‘%s’输出
   char c[] ="GoodDay!";
   printf("%s", c);

使用‘%s’输出需要注意几点
1 输出的字符不包括‘\0’
2 ‘%s’ ,printf输出项是字符数组名
3 数组长度 > 字符串实际长度,只输出到‘\0’.
4 一个字符数组包含多个‘\0’,遇到第一个就结束。

⑤、字符数组的输入
  • 使用‘%c’输入
  • 使用‘%s’输入
使用‘%c’输入
 for(i = 0; i < 10; i++)
 {
      scanf("%c", &c[i]);
  }
  
使用‘%s’输入
 char s[9];
 scanf("%s", s);

在这里插入图片描述

void main()
{
	char ch[32] = ""; // 通过“”d的方式可以清除字符数组中的垃圾字符,让每一个元素都是‘\0’ 
	scanf("%s", ch);
	 
	printf("ch = %s\n", ch);
}

四、🍒字符串处理函数

①、字符串复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②、字符串连接

在这里插入图片描述在这里插入图片描述

③、字符串比较

功能:将字符串与另一个字符串从首字母开始比较
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

④、字符串大小写转换

在这里插入图片描述
在这里插入图片描述

⑤、获取字符串长度

功能:计算字符串的实际长度,返回长度不包含‘\0’
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值