嵌入式学习 C语言 数组

数组 :是一种构造数据类型


    由数据类型相同的n个元素所组成的一个有限集合;
    数组大小是固定的,大小为n*每个元素的大小
    每个元素都是相同的

一维数组

1.数组的定义
    
数据类型 数组名[N]
N :1元素的数量;


2.需要是一个整型常量 或者整型常量表达式(c89)/(c99)


3.sizeof : 在编译阶段计算;c99;柔性数组(变长数组)

2.数组的访问:

数组名[下标]


1.下标从0开始到N-1


2.变量 变量 表达式


3.数组的初始化

1.全部初始化(初始化列表)
    int arry[ 5 ] ={1,2,3,4,5}
    注意:数量一致,类型匹配

2.局部初始化
    int arry[ 5 ] ={1,2,3}
    没有初始化的元素 初始化为0;

3.默认初始化
    int arry[ ]={1,2}
    数组元素个数由参数的数量确定

4.数组的存储特性
    1.单一性 数组所有元素类型相同
    2.有序性 元素在内存中是有序存放的
    3.连续性 元素存储是连续存储的
    
5.数组的常见操作.   数组不允许整体操作
    1.遍历打印    
    2.便利比较+3
 


3.数组排序


1.冒泡排序   

 相邻两个元素间进行比较,大的数据向后放,小的往前放(升序)

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int arry[10] = {0, 2, 4, 8, 1, -2, 18, 34, -12, 0};	
	int len = sizeof(arry) / sizeof(arry[0]);
	int j = 0;
	int i = 0;
	for (i = 0; i < len; i++)
	{
		scanf("%d", &arry[i]);
	}

	for (j = len - 1; j > 0; j--)
	{
		for (i = 0; i < j; i++)
		{
			if (arry[i] < arry[i + 1])
			{
				int swap = arry[i];
				arry[i] = arry[i + 1];
				arry[i + 1] = swap;
			}
		}
	}

	for (i = 0; i < len; i++)
	{
		printf("%d ", arry[i]);
	}
	putchar('\n');
	return 0;
}

2.选择排序

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int arry[10] = {0, 2, 4, 8, 1, -2, 18, 34, -12, 0};	
	int len = sizeof(arry) / sizeof(arry[0]);
	int j = 0;
	int i = 0;
	for (i = 0; i < len; i++)
	{
		scanf("%d", &arry[i]);
	}

	for (i = 0; i < len - 1; i++)
	{
		for (j = i + 1; j < len; j++)
		{
			if (arry[i] > arry[j])
			{
				int swap = arry[i];
				arry[i] = arry[j];
				arry[j] = swap;
			}
		}
	}

	for (i = 0; i < len; i++)
	{
		printf("%d ", arry[i]);
	}
	putchar('\n');
	return 0;
}

二维数组

1. 二维数组:


由n个数据类型相同的一维数组所组成的数组;
如何去判断一个变量的类型名: 去掉变量名,即为类型名

2.二维数组的定义
类型名 数组名[M][N];

类型名:二维数组的元素一维数组的元素类型
M:二维数组的元素数量;
N: 二维数组的元素一维数组的元素数量


3. 二维数组的访问


数组名[m] :
数组名[m][n]:
数组名:访问的二维数组的名称;
m: 访问二维数组的第m+1(一维数组)元素;
n:访问二维数组的第m+1(一维数组)元素的第n+1个元素

4.二维数组的初始化

初始化不等于赋值;


1.全部初始化
//int a[3]  = {1,2,3};

int arry[2][3] = {{1, 2, 3}, {4, 5, 6}};
int arry[2][3] = {1, 2, 3, 4, 5, 6};


注意:数量一致,类型匹配; =
2.局部初始化

int arry[2][3] = {{1, 2, 3}};
int arry[2][3] = {{1, 2,}};
int arry[2][3] = {1, 2, 3, 4};
int arry[2][3] = {{0}};
int arry[2][3] = {0};


注意:没有初始化的元素,初始化为0;


3.默认初始化

int arry[][3] = {{1, 2, 3}, {4, 5, 6}};
int arry[][3] = {1, 2, 3, 4, 5};


5.二维数组的存储特性:
 


字符型数组


1.含义:由n个字符型数据元素所组成的数组;


2.字符型数组定义
char str[1024] = {0};
3.字符型数组访问
数组名[下标];


4.字符型数组初始化


1.全部初始化

char str[5] = {'h', 'e', 'l', 'l', 'o'};               
char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};         
char str[6] = {"hello"};
char str[6] = "hello";



2.局部初始化

char str[5] = {'h', 'e', 'l'};
char str[10] = "hello";

char str[10] = {0};
char str[10] = "\0"    


3.默认初始化
 

char str[] = {'h', 'e', 'l', 'l', 'o'};     不是字符串
char str[] = "hello"; 是字符串
char str[] = "\0";


5.字符型数组的操作

耦合性:高耦合  不好
好的程序:低耦合,高内聚

1.输入:
scanf("%s %s", str);
gets(str);
不使用这两个函数如何从终端接收字符串,

2.输出
printf("%s %s", str);
puts(str);

字符型数组中字符串的遍历一般条件
while (str[i] != '\0')
{
}
3.字符串有效字符数量统计

strlen
#include <string.h>
size_t strlen(const char *s);



4.字符串拷贝


定义两个字符型数组
char str1[32] = {"hello world"};
char str2[32] = {0};
将字符串从str1拷贝到str2;


#include <string.h>

char *strcpy(char *dest, const char *src);


dest:拷贝到的目标空间;
src: 拷贝的源字符串空间;


函数返回值:
    拷贝到的目标空间的地址标号;

5.字符串拼接


定义两个字符型数组
将字符串从str1拷贝到str2;
输出:

char str1[32] = {"helloworld"};
char str2[32] = {"world"};

    #include <string.h>
char *strcat(char *dest, const char *src);


函数功能:字符串拷贝;

dest:拷贝到的目标空间;
src: 拷贝的源字符串空间;


函数返回值:
    拷贝到的目标空间的地址标号;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值