我印象中的指针与数组2

本文介绍了C语言中的数组概念,包括数组的定义、使用方法及内存布局。并通过实例演示了一维数组的操作,如求平均值、查找大于平均值的元素及其下标等。

由于前面写的太大了,没有注重基础,今天先把数组的基本定义和简单使用写一下,后面附了一个简单的数组计算,就当是练习

1、什么是数组

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。

      在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

       每一个变量对应一块内存空间,如果是整型int,则需要 4个字节的内存空间如果是字符型char,则需要 1个字节的内存空间数组是一组具有相同数据类型的元素的集合

假设现在我需要10int型数据,那么就需要10int的内存空间

下面的定义:

inta[10]; 

就在内存中分配了10int的空间,共有10*4 = 40个字节,并为它们起了一个名字叫a

我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length)。

例如int a[10];就定义了一个长度为10的整型数组,名字是a

数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:

arrayName[index]

例如:int a[10]   对于这个数组,

数组下标为 a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9] 10,a[9]是最后一个,没有a[10]

a[0] = 20;

a[4] = 10;

a[9] = 30;

2、一维数组的定义与使用

所谓一维数组就是指数组定义的时候数组名后面只有一个下标的数组,这里只有一个下标的意思是说数组名后面只有一个[], 比如 int a[10],而像int  a[2][3]有多个[]的就不叫一维数组了。

2.1一维数组的定义方式:

dataType  arrayName[length];

dataType 为数据类型,arrayName 为数组名称,length 为数组长度。例如:

float m[12];  // 定义了一个有12个元素的浮点型数组,每个元素都是浮点型

char ch[9];   // 定义了一个有9个元素的字符型数组,每个元素都是字符型

需要注意的是:
1)
数组中每个元素的数据类型必须相同,对于int a[10];,每个元素都必须为 int

2)
数组长度 length 最好是整数或者常量表达式不能是变量。例如 1020*4等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n4*m 等,在某些编译器下就会报错。

3)
访问数组元素时,下标的取值范围为 0 index < length,过大或过小都会越界,导致数组溢出,发生不可预测的情况。


4)
数组是一个整体,它的内存是连续的,下面是inta[10];的内存示意图:

a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

a[9]

 

                                       a

数组名a代表的是整个数组,数组中的元素是通过下标来获取的

 

5)可以通过sizeof(数组名)来获取数组所占空间大小,通过sizeof(数组名)/sizeof(数组类型)获得数组的长度

printf ("%d\n", sizeof(a));

printf ("%d\n", sizeof(a) / sizeof(int));

这是一个求数组大于平均值的元素和以及下标,奇数和,偶数和
#include<stdio.h>

int main()
{
	int a[] ={1,2,3,4,5,6,7,8,9,10};
	int average = 0;
	int sum1    = 0;
	int sum2    = 0; 
	int sum3    = 0;
	int sum4    = 0;
	int index   = 0;
	int i;
	for(i=0;i<(sizeof(a)/sizeof(int));i++)
	{
		sum1 += a[i];
	}
	average = sum1 / (sizeof(a)/sizeof(int));
	
	for(i=0;i<(sizeof(a)/sizeof(int));i++)
	{
		if(a[i] > average)
		{
			sum2 += a[i];
		}
		if(a[i] > average)
		{
			index = i;	
			printf("大于平均值元素下标为:%d\n",index);
		}
		
	}
	for(i=0;i<(sizeof(a)/sizeof(int));i++)
	{
		if(i % 2 == 0)
		{
			sum3 += a[i];
		}
		else
		{
			sum4 += a[i];
		}
	}
	printf("平均和:%d,大于平均值和为:%d,偶数和为:%d,奇数和为:%d\n",
			average,sum2,sum3,sum4);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值