012 C语言基础:C数组

一:概述

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来代表一个个单独的变量。

数组中的特定元素可以通过索引访问。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。数组中的特定元素可以通过索引访问,第一个索引值为0。

 

二:声明数组

在C中要声明一个数组,需要指定元素的类型和元素的数量。

type arrayName [arraySize];

这是一维数组,arraySize必须是一个大于零的整数常量,type可以是任意有效的C数据类型。例如,声明一个类型为double的包含10个元素的数组balance:

double balance[10];	

现在balance是一个可用的数组,可以容纳10个类型为double的数字。

 

三:初始化数组

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

大括号{}之间的值的数目不能大于我们在数组声明时[]中指定的元素数目。若是省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

创建一个数组,它与前一个实例中所创建的数组是完全相同的。

 

四:访问数组元素

double salary = balance[9]; 把数组中第10个元素的值赋给变量salary

实例:
	#include <stdio.h>
	int main(){
		int n[10];      // n是一个包含10个整数的数组
		int i,j;

		// 初始化数组元素
		for(i=0; i<10; i++){
			n[i] = i + 100;
		}
		for(j=0; j<10; j++){
			printf("element[%d] = %d \n", j, n[j]);
		}
		return 0;
	}
结果:
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# vim fangwenshuzu.c 
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# gcc fangwenshuzu.c -o fangwenshuzu                                                                                            
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# ./fangwenshuzu 
	element[0] = 100 
	element[1] = 101 
	element[2] = 102 
	element[3] = 103 
	element[4] = 104 
	element[5] = 105 
	element[6] = 106 
	element[7] = 107 
	element[8] = 108 
	element[9] = 109 

 

五:多维数组

C语言支持多维数组,形式如下:

type name[size1][size2]...[sizeN];

例如,下面的声明创建一个三维5.10.4整型数组

int threedim[5][10][4];

二位数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:type arrayName [ x ][ y ];

其中,type 可以是任意有效的 C 数据类型,arrayName 是一个有效的 C 标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。

因此,数组中的每个元素是使用形式为a[i][j]的元素名称来标识的,其中a是数组名称,i和j是唯一标识a中每个元素的下标。

初始化二维数组

int a[3][4] = {
	{0, 1, 2, 3},		// 初始化索引号为0的行
	{4, 5, 6, 7},		// 初始化索引号为1的行
	{8, 9, 10, 11}		// 初始化索引号为2的行
}
内部嵌套的括号是可选的,下面的初始化与上面是等同的。
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

访问二维数组元素

二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。
int val = a[2][3]		获取数组中第3行第4个元素
实例:
	#include <stdio.h>
	int main(){
		// 一个带有5行2列的数组
		int a[5][2] = {
			{0, 0},
			{1, 2},
			{2, 4},
			{3, 6},
			{4, 8}
		};

		int i, j;
		printf("%d \n", a[1][1]);		// 1 1 为其索引值
		printf("------------- \n");
		// 输出数组中每个元素的值
		for(i=0; i<5; i++){
			for(j=0; j<2; j++){
				printf("a[%d][%d] = %d \n", i, j, a[i][j]);
			}
		}
		return 0;
	}
结果:
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# vim erweishuzu.c
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# gcc erweishuzu.c -o erweishuzu                                                                                             
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# ./erweishuzu 
	2 
	------------- 
	a[0][0] = 0 
	a[0][1] = 0 
	a[1][0] = 1 
	a[1][1] = 2 
	a[2][0] = 2 
	a[2][1] = 4 
	a[3][0] = 3 
	a[3][1] = 6 
	a[4][0] = 4 
	a[4][1] = 8 

 

六:C传递数组给函数

如果想要在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,

因为每种方式都会告诉编译器将要接收一个整型指针。同样地,也可以传递一个多维数组作为形式参数。

方式一:形式参数是一个指针
	void myFunction(int *param){
	
	}
方式二:形式参数是一个已定义大小的数组:
	void myFunction(int param[10]){
	
	}
方式三:形式参数是一个未定义大小的数组:
	void myFunction(int param[]){
	
	}
实例:
	现在,让我们来看下面这个函数,它把数组作为参数,同时还传递了另一个参数,根据所传的参数,会返回数组中各元素的平均值:
	double getAverage(int arr[], int size){
		int i;
		double avg;
		double sum;

		for(i=0; i<size; ++i){
			sum += arr[i];
		}
		avg = sum / size;
		return avg;
	}

	#include <stdio.h>
	double getAverage(int arr[], int size);		// 函数声明

	int main(){
		// 带有5个元素的整型数组
		int balance[5] = {1000, 2, 3, 17, 50};
		double avg;
		// 传递一个指向数组的指针作为参数
		avg = getAverage(balance, 5);
		// 输出返回值
		printf("平均值是: %f", avg);

		return 0;
	}
	结果:
		┌──(root💀kali)-[~/Desktop/c_test]
		└─# vim shuzuhanshu.c
		┌──(root💀kali)-[~/Desktop/c_test]
		└─# gcc shuzuhanshu.c -o shuzuhanshu   
		┌──(root💀kali)-[~/Desktop/c_test]
		└─# ./shuzuhanshu 
		平均值是: 214.400000
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值