初阶一维二维数组

一.数组的概念

数组是一组相同类型元素的集合。

注意:
1.数组中存放的数组元素个数大于0;
2.数组中存放的多个数据,类型是相同的。

二.变长数组

1.变长数组的概念

arr[ ],[ ]中一般为常量,但在一些编辑器中,[ ]中可以是变量,我们称这些为变长数组。
变长数组是指可以根据变量指定数组的大小,并不意味着数组的大小可以随意变化,其大小一旦确定,就只能为当时变量的大小。
例如:

#include <stdio.h>
> int main()
> {
> int a = 0;
> scanf(" %d ", &a );
> int arr[a];
> //将每个元素设置为其索引的平方并打印出来
> for(int i = 0; i < n; i++)
>    {
>        arr[i] = i * i;
>        printf(" %d ", arr[i]);
>    }
>    return 0;
> }

注意:变长数组不能初始化

2.数组的类型

int arr[10]//其类型是int [10]
> int arr[12]//其类型是int [12]

3.一维数组在内存中的存储

一维数组在数组中的存储是按照数组元素的大小以空间的型式连续存放,空间名字就叫做地址。

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i = 0; i < 10; i++)
	{
		printf("%p\n", &arr[i]);
	}
	return 0;
}

在这里插入图片描述

三.数组传参

1.数组在传参的时候,实参可以写数组名,形参只是数组的形式;
2.实参和形参的名字可以一样,也可以不一样;
3.数组在传参时,型参与实参是同一数组;
4.函数在设计时功能应该尽可能单一。

//比如要想利用数组传参实现两个数字相加
> #include <stdio.h>
> int add(int x,int y)
> {
>      return x + y;
> }
> 
>   int main()
>   {
>     int a = 0;
>     int b = 0;
>     int sum = add( a , b );
>     printf(" %d ", sum );
>     return 0;
>   }

注意:数组传参时,形参和实参个数要匹配,形参数组的“[ ]”内部可以省略(一维数组),二维数组的行值可以不写,但是列值不行。

四.二维数组

1.二维数组的概念

将一维数组作为数组的元素,这就是二维数组。(如果以二维数组作为元素,这就是三维数组)

2.二维数组初始化

//1.完全初始化
>int arr[2][3] = { 1 , 2, 3 , 4 , 5 , 6 };
>//2.不完全初始化
>int arr[2][3] = { 0 };
>//3.错误初始化
>int arr[1][2] = { 1 , 2 , 3 }; 

3.

五.数组练习

1.多个字符从两端移动,向中间汇聚

#include <stdio.h>
#include <string.h>
//多个字符从两端移动,向中间汇聚
void Swap(char* str1, char* str2,int x)
{
	int left = 0;
	int right = x;
	while(left <= right)
	{
		Sleep(1000);
		str2[left] = str1[left];
		str2[right] = str1[right];
		left++;
		right--;
		printf("%s\n", str2);
	}
}
int main()
{
	char arr1[] = "Welcome to the world!!!";
	char arr2[] = "#######################";
	int sz = strlen(arr1) - 1;
	Swap(arr1, arr2,sz);
	return 0;
}

2.⼆分查找

#include <stdio.h>
//⼆分查找
void Find(int arr[], int m,int k)
{
	int left = 0;
	int right = m - 1;
	int count = 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] == k)
		{
			printf("找到了,该数字在数组中的下标为:%d\n", mid);
			count = 0;
			break;
		}
		else if (arr[mid] > k)
		{
			right = mid;
		}
		else
		{
			left = mid;
		}
	}
	if (count)
	{
		printf("很遗憾,没有找到该数字\n");
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = 0;
	printf("请输入你要寻找的数字\n");
	scanf("%d", &ret);
	Find(arr, sz, ret);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值