数组的概念和基本使用

目录

 

一.一维数组

二.二维数组

三.数组名


一.一维数组

1.数组的创建和初始化

数组的定义:

type_t   arr_name   [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

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

int arr[3];
char arr[3];
double arr[2];

创建数组时  【】 应使用常量,不能使用变量

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)

(数组只能被整体初始化,不能直接赋值)

char arr1[] = "abc";//带/0
char arr2[3] = {'a','b','c'};//不带/0

2.一维数组的使用

 数组是使用下标来访问的,下标是从0开始。

 数组的大小可以通过计算得到。

//计算数组的元素个数
    int sz = sizeof(arr)/sizeof(arr[0]);

3.一维数组的储存

看以下代码,我们试着输出数组元素在内存中的地址

#include <stdio.h>
int main()
{
char arr[10] = {0};
 int i = 0;
 for(i=0; i<sizeof(arr)/sizeof(arr[0]); ++i)
 {
 printf("&arr[%d] = %p\n", i, &arr[i]);
 }
 return 0;
}

在c语言中,任何变量(基本变量,指针变量,结构体变量,数组)空间都是整体开辟,但任何元素的起始地址一定是开辟的众多字节地址中地址最小的

二.二维数组

1.二维数组的创建和初始化

int arr[3][4];
char arr[3][5];
double arr[2][4];

创建二维数组时第一个【】可以省略但第二个【】不能省略

//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {
   
   {1,2},{4,5}};
int arr[][4] = {
   
   {2,3},{4,5}};

2.二维数组的使用

二维数组的本质是一维数组,只不过内部元素放的是数组

int arr[3][4] = { 0 };//表示该一维数组中存放了三组存放了四个0的数组

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

像一维数组一样,这里我们尝试打印二维数组的每个元素。

#include <stdio.h>
int main()
{
    char arr[3][4];
	int i = 0;
	for (i = 0; i<3; i++)
	{
		int j = 0;
		for (j = 0; j<4; j++)
		{
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
}
	system("pause");
	return 0;
}

我们看到,二维数组在内存中的存放也是连续的,这样证明二维数组的本质是一维数组

三.数组名

数组名是数组首元素的地址。(有两个例外)

1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数 组。

2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

数组传参时发生降维,降维成指针

void bubble_sort(int arr[])//int arr[] 表示的是一个指针: int *arr 。

数组降维:原因:减少函数传参的成本问题(空间+时间)

                  结果:降维成指向其内部元素类型的指针

用sizeof求数组元素中个数时,尽量在数组定义中去求

在对指针+1时,是加上其所指向类型的大小

猜你喜欢

转载自blog.csdn.net/m0_58103115/article/details/117373481
今日推荐