四、数组

来源:互联网 发布:java lamda表达式语法 编辑:程序博客网 时间:2024/04/30 01:18

说数组这个概率前先介绍下地址,这样又助于对数组的理解。

一、地址:

在计算机中,内存是以字节为单位的存储空间。每个内存都有自己一个唯一的内存地址,在程序中任何数据都有自己的内存地址,一个变量,一个函数都有自己的内存地址。

每当定义一个变量时,系统就会自动为这个变量分配内存地址。

int a,b; printf(“%d\n%d",&a,&b);

上面这段代码中就定义了两个变量 a ,b 并打印出他们的内存地址(&可以打印出内存地址),打印结果(10进制)如下:


可以看出一般两个连续定义的变量在内存地址中是连续的。

二、一维数组:

一维数组的定义:

数组类型 数组名 [元素个数]int a[5];

[ ] 里面的元素个数必须是固定的值,可以是常量(5,6)或者常量表达式(2*3,4/2)。不能使用变量和变量表达式来表示元素的个数,大多数情况下的元素个数是不能省略的(数组作为函数形参,和初始化的情况下除外)。

一维数组的初始化:

一维数组的初始化一般形式是这样的:类型  数组名 [元素个数] = {元素1,元素2.....};int a [2] = {1,2};

上面的形式其实相当于

int a [2];a [0] = 1;a [2] = 2;

注意:元素的下标是从0开始的,在C语言的编译器中,是不会对元素的下标越界进行检查的,所以访问数组时要小心谨慎。

int a [4] = {3,4};

上面这样的数组初始化只赋值了前面两个元素,也就是说 a[2] a[3]没有对其赋值。

int a[ ] = {4,6};

数组的初始化赋值是可以省略元素个数的,这样的数组初始化表示的元素个数是两个,分别是 a[0] a[1] 

注意:当定义一个数组时没有初始化赋值,后面对数组进行赋值时只能一个一个的赋值,如:

int a [5];a [0] = 6;a [1] = 2;a [2] = 5;a [3] = 6;a [4] = 8;

一维数组与函数参数:

一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,形参的改变不影响实参。

// b是test函数的形参(形式参数)#include <stdio.h>void test(int b){    b = 9;}int main(int argc, const char * argv[]) {        int a[3];    a[0] = 10;        printf("调用函数前的值:%d\n",a[0]);        test(a[0]);        printf("调用函数后的值:%d",a[0]);        return 0;}

输出结果:


数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全等同,是存放在同一存储空间的同一个数组。这样形参数组修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

#include <stdio.h>// b是test函数的形参(形式参数)void test(int b[]){    b[0] = 9;}int main(int argc, const char * argv[]) {        int a[3];    a[0] = 10;        printf("调用函数前的值:%d\n",a[0]);    // a是test函数的实参(实际参数)    test(a);        printf("调用函数后的值:%d",a[0]);        return 0;}

输出结果:


三、二维数组:

二维数组的定义:

数组类型 数组名 [行数] [列数]int [3] [2]; // 3行2列 一共有6个元素

二维数组的存储方式:

二维数组在地址中的存储方式是先按顺序存储第一行再存储第二行,如下:

a [0] [0]  a [0] [1] a [1] [0]  a [1] [1]a [2] [0]  a [2] [1]

二维数组的初始化:

按行进行初始化:

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

这里的初始化可以只进行部分元素的初始化,不需要初始化的元素可以省略,没有初始化的元素默认值为0。

按存储顺序进行初始化:

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

注意看上面的初始化元素是少一个的,是可以只初始化部分元素的,这里的第 a [2] [1]个元素没有进行初始化,没有进行初始化的元素默认值为0。

初始化的时候可以省略行数,但是不能省略列数,如下:

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

0 0
原创粉丝点击