c语言数组

数组 

一: 1、什么是数组?

    一组 相同类型 的 若干 个 有序 的数据集合

    2、数组的名词:

    1)数组名:带表一组相同类型若干个有序的数据集合()

    2) 数组元素:构成数组的每一个元素

    3)下标:数组是有序的,下标有序,用来标识每个元素在数组中的位置

    4)数组的维度: 元素下标的个数

    5)数组的长度:集合中元素的个数

 

    3、分类:

    1)按内容分类:数值型数组(整型、实型)、字符型数组、指针数组、构造数组

    2) 按维度分类:一维数组、二维数组、多维数组

 

二: 1、一维数组的定义?

    格式:

    数据类型   数组名[长度];1+2  4+5

    int a[10];

    //定义了一个整型的数组a

    //另一种描述:定义了了一个长度为10,每个元素都只能存放int型数据的数组  数组名是a

    int 表示数组中每个元素的类型都必须是int型

 

    注意:

    1)a是数组的名称,a需要遵守标示符的命名规范

    (1)字母、数字、_ 、美元符号组成,不能以数字开头,不能和关键字重名,严格区分大小写

    2)数组长度不能使用变量,

    int n=5;  int arr[n]; //这种写法C规范不可以,但是Xcode可以

    原因:不能用定义数组的时候长度用变量同时初始化,如果定义数组的时候长度用变量的话,编译时并不会运行,编译器看到变量,同时初始化话的话,编译器不确定是否超出了数组长度范围

    3)数组长度可以使用宏定义

    #define N 5; int arr2[N+3];//这种写法是可以的

    4)数组名不能和其他变量重名

    int a;

    int a[10];错误

    5)可以一次定义多个数组

    int a[10],b1[3]; //表示定义了两个整型数组,第一个数组名a,能存放10个int型的数据,第二个数组 b1 能存放3个int型数据

    6)数组定义后,只能存放定义类型的数据

    int a[10]; 只能存放int型数据

    7)可以定义变量的同时,定义数组

    int a,b,arr[10];

 

三:1、数组的初始化

    变量的初始化, 给变量赋初值

    数组的初始化,给数组中的每个元素都要进行初始化;

 

    2、数组的初始化的方法

    数组如果定义完成以后,没有进行初始化,这个时候,元素的值是随机数(垃圾值)

    初始化的格式:int 数组名[长度]={值1,值2,.....}

    1)定义的同时进行初始化     int a=10;

    (1)完全初始化

    int a[5]={1,2,3,4,55};

    注意:初始化数值得个数可以小于长度,但是不能大于长度

    不指定数组长度的完全初始化

    int a3[]={1,2,3}; //定义一个数组,数组的长度由初始化的元素的个数决定的

    误区:

    a3={1,2,3};   错误

    a3[]={1,3,4}; 错误

    (2)部分初始化

    int a1[5]={1};   //优先把1初始化给第一个元素

    指定元素的部分初始化

    int a2[5]={[2]=1,[4]=100};

    // 给第三个元素初始化为1  给第5个元素初始化为100

 

    2)先定义,后初始化

    误区:

    int a1[5];

    a1[]={1,2,3}; 错误的

    a1={1,2,3};   错误的

    正确用法:每个元素逐个进行初始化

    a1[0] = 10;

    a1[1] = 100;

    a1[2] = 1000;

    a1[3] = 10000;

    a1[4] = 1;

    a1[5] = 0; //错误的

    3、数组的引用

    数组的引用,其实就是获取数组中存储的内容

    可以通过数组下标,来访问数组中的每一个元素

    如果说数组长度为n , 下标的最大值 n-1,最小是 0

    如果说某个数组的下标最大值是n,数组最少有 n+1个元素

 

四: 1、数组的存储方式

    //每个地址相差4个字节

    int a[3]={13,34,438};

    //数组的首地址 = a[0]的地址 = a

    //所以,数组名存放的实际上是数组的首地址

    2、数组的长度计算方法

    // 数组在内存中占用的字

    节数:sizeof(int)*n个数  = sizeof(数组名)

    3、访问数组的下标,超过了最大下标

    //约错了对象,越界程序会给出警告,但是不会报错,千万要注意越界

 

五:数组与函数之间的关系:

    1)数组的元素作为函数的参数(传的是变量值,函数结束内存释放)

       函数的形参跟调用函数传得实参(必须是是相同的数据类型)

    注意:数组元素作为函数的参数,这是值传递

    2)数组名作为函数的参数(传的是地址是指针)

       因此可以修改原数组内的元素

    注意:

    1)数组名作为函数的参数,是地址的传递,在函数中可以直接修改数组的内容

    2)用数组名作为函数参数,会丢失数组长度,所以用数组名作为函数的参数,要传递数组名的同时,尽量把数组长度也传过去

    函数调用时传的数组地址求数组长度为8,因为它求的是指针在在内存中地址中占用的大小。而在main函数中则sizeof(数组名)求的是数组占用内存大小(具体不太明白)

    3)函数形参中定义的数组的长度,和实参数组的长度尽量保持一样,否则可能会有问题

    4)通常情况下形参的数组长度是不指定的,它的长度有实参的来决定的

    5)函数的形参数组的类型,要和实参数组的类型要一至

posted @ 2014-10-19 21:24  _boy  阅读(426)  评论(0编辑  收藏  举报