我印象中的指针与数组2

来源:互联网 发布:淘宝店网名昵称大全 编辑:程序博客网 时间:2024/05/21 16:28

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

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;}


原创粉丝点击