多维数组

C语言多维数组



一.多维数组之一维数组

a).数组定义: 是一种分配内存的方法,分配的内存是多个类型相同的数据
b).数组的优点:能够大量一次性分配内存
c).数组的缺点:数据类型必须相同,因为有些场合需要数据类型不一样,必须一次性分配好,不能做到随时用随时分配
e).定义数组的语法格式:
元素数据类型 数组名[元素个数]={初始化表};
f).数组的特点:
1.数组分配的内存是连续的
2.数组名就是数组的首地址等于数组第0个元素的首地址
3.数组的长度也称数组元素的个数,而不是整个数组分配内存的大小
4.数组下标就是就是数组种元素的编号,又称索引号(index),下标从0开始
5.数组中元素的访问是通过[]和下标进行访问
6.越界非法访问会导致程序崩溃(写修改会导致程序崩溃,可能修改了Linux系统中的核心代码);
g).计算数组元素个数公式:
数组元素个数 = sizeof(数组名)/sizeof(数组的第0个元素);

#include <stdio.h>

int main(void){
	//数组定义的形式
	int a[5]={1,2,3,4,5};  	   	//定义并初始化
	int b[]={1,2,3,4,5};       	//元素个数为5个
	int c[5];				   	//定义未初始化,随机数
	int d[5]={0};				//5个元素全是0
	int e[5]={1,2};				//未初始化的为0
	int f[5]={};				//5个元素全是0
	int g[5]={1,2,3,4,5,6,7,8}; //将无效的元素省略,省略6,7,8

	printf("5个元素的首地址:%p\n %p\n %p\n %p\n %p\n",
	       &a[0],&a[1],&a[2],&a[3],&a[4]);
	
	int array[5]={1,2,3,4,5};
	printf("array的首地址:%p\n",array);
	printf("&array[0]的首地址:%p\n",&array[0]);
	printf("array数组占用内存大小:%d\n",sizeof(array));
	printf("array[0]占内存大小:%d\n",sizeof(array[0]));
	printf("array数组长度:%d\n",sizeof(array)/sizeof(array[0]));
	return 0;
}

终端显示

变长数组

元素个数不定,不可初始化

#include <stdio.h>

int main(void){
	int len;
	sizeof("%d",&len);
	int a[len];  //变量数组,元素个数不定,不可初始化

	for(int index=0;index <len;index++){
		*(a+index)  = index; //先取地址,后算值
	}
	
	return 0;
}

二.多维数组之二维数组

由多个一维数组组成的数组,二维数组的每个元素是一个一维数组,二维数组的本质还是一个一维数组,只是形式上将一维数组再次分组而已
定义二维数组的语法:
元素数据类型 二维数组名[二维数组元素个数][一维数组元素个数]={初始化表};
计算二维数组的元素个数:

例如

#include <stdio.h>

int main(void){
	int array1[2][2]={{1,2},{3,4}};
	int array2[2][2]={0};
	int array3[2][2];
	int array4[][2]={{1,2},{3,4}}
	int array5[2][2]={{1,2},{0}};
	int array6[2][2]={1,2,3,4};

	int a[2][5]={{1,2,3,4,5},{6,7,8,9,10}};

	int row=sizeof(a)/sizeof(a[0]);
	int com=sizeof(a[0])/sizeof(a[0][0]);

	//打印输出
	for(int i=0;i<row;i++){
		for(int j=0;j<com;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	
	printf("二维数组每个元素的地址:\n %p\n %p\n %p\n" 
			"%p\n %p\n %p\n %p\n %p\n %p\n %p\n"
			,&a[0][0],&a[0][1],&a[0][2],&a[0][3],&a[0][4],&a[1][0],
			&a[1][1],&a[1][2],&a[1][3],&a[1][4]);
			 
	printf("二维数组a的首地址:%p\n",a);
	printf("&a[0]的首地址地址:%p\n",&a[0]);
	printf("&a[0][0]的首地址:%p\n",&a[0][0]);
	printf("二维数组占用内存大小:%d\n",sizeof(a));
	printf("二维数组第0个一维数元素占内存大小:%d\n",sizeof(a[0]));
	printf("获取二维数组的长度:%d\n",sizeof(a)/sizeof(a[0]));
	printf("获取二维数组第0个一维数组元素的长度:%d\n",
			sizeof(a[0])/sizeof(a[0][0]));
	return 0;
}

C语言函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值