数组——C语言

本文详细介绍了C语言中数组的一维和二维概念,包括初始化方式、类型定义、打印方法、内存存储特性(连续性),以及C99中的变长数组和字符串型数组的特性和操作。
摘要由CSDN通过智能技术生成

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

一:一维数组

1:初始化

//完全初始化
int arr1[5] = {1,2,3,4,5}; 
//不完全初始化
int arr2[5] = {1,2};
//不完全初始化,默认数组没有定义的元素的值为0
int arr3[] = {1,2,3,4,5};
//对于这种没有声明个数的数组,其元素个数由其初始化的数量决定。
//像这个数组,初始化包含了5个数,那么其个数就是默认为5个。

2:数组的类型

数组的类型就是去掉数组名留下来的内容。

如,int arr[3]的类型是int [3],char arr[3]的类型时char [3]。

3:数组的打印

如果要打印出数组中的所有元素,那么需要借助循环语句。

#include<stdio.h>
int main(){
int arr[5] = {1,2,3,4,5};
for(int i = 0;i <= 4,i++){
printf("%d",arr[i]);
}
return 0;
}

4:一维数组在内存中的储存(取地址)

取地址需要用%p来储存

#include <stdio.h>
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i = 0; i <= 9; i++) {
		printf("%p\n", &arr[i]);//数组取地址需要用到取地址符&
	}
	return 0;
}

运行结果如下:

这里需要提到,上面的结果是X64,即64位的环境,地址是64bit位的比较长。

因此,我们换为X86,即32位的环境,如下

由于这里的地址的16进制型,可以发现,每相邻的元素之间相差4,因为这个数组类型是int []型,一个int型占4个bit,因此可以发现,数组在内存中是连续存放的。

5:sizeof计算数组元素的个数

sizeof是用来计算类型或变量的大小,但是其同样可以计算数组的大小,单位是字节。

#include <stdio.h>
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d", sizeof(arr) / sizeof(int));
	//sizeof(arr) = 40。是计算这个数组的大小
	//sizeof(int) = 4。是计算int这个类型的大小
	//于是两者相除便得出数组元素的个数
	return 0;
}

使用sizeof来计算个数,这样无论数组怎么变,sizeod都可以方便地求出个数。

二:二维数组

把一维数组当作数组的元素时,这个数组就是二维数组。同理,把二维数组当作元素时,那么这个数组就是三维数组。

int arr[2][3] = { 0 };
//其中2代表有两行,3代表有三列

1:二维数组的初始化

int arr1[2][3] = {1,2,3,4,5};
//这是完全初始化
int arr2[2][3] = {1 ,2};
//这是不完全初始化,未赋值的元素默认为0

按照行初始化:

int arr3[2][3] = {{1,2},{4}};
//{1,2}代表第一行是1,2,0
//{4}代表第二行是4,0,0

初始化的省略:

int arr4[][3] = {0};
//省略只能省略行数,不能省略列数

2:二维数组的输出

include<stdio.h>
int main(){
int arr[2][3] = {1,2,3,4,5};
for(int i = 0;i < 2;i++){
for(int b = 0;b < 3;b++){
printf("%d",arr[i][b]);
}
printf("\n");//使每行都换行打印
}
return 0;
}

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

二维数组在内存中同样是连续的

三:C99中的变长数组

定义一个数组时,我们需要考虑其需要的元素,通常情况下,我们只能估计一个稍大于需要的值,但是这样会造成浪费储存。于是,C99出来了一个变长数组,就是可以将数组的个数用变量表示,即int arr[i];  (变长数组不需要初始化)。再根据一系列式子,求出真正需要的个数。

不过在VS2022中,无法使用变长数组。

四:字符串型数组

如果需要定义一个字符串变量,那么必定需要用到数组。

其初始化格式与其他的不同:

char arr[] = "12345";
//或者
char arr[] = {'1','2','3','4','5','\0'};

其元素个数就是其字符的个数,\0在内,但\0不纳入计算中。

其输出也有差异:

//输出整个字符串
char arr1[] = "12345";
printf("%s",arr1);
//输入元素
printf("%c",arr[1]);

区别就在于,相比与其他类型数组,字符串型可以 直接输出整个数组。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值