四、数组
来源:互联网 发布: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};
- 四、数组
- 数组(四)
- 数组四 其他 (c#)
- PHP之四,数组
- 四、数组(二)
- 数组笔记(四)
- JAVA学习四:数组
- Java基础<四>---> 数组
- 折腾二维数组【四】
- 数组基本操作(四)
- 四、数组和指针
- 阿里-----数组四等分
- 数组四等分
- 实验四:数组排列
- 【数据结构实验四】数组
- 四、4、数组方法
- Java基础四:数组
- 四维矩阵、四维数组
- 抽奖转盘
- 开始新的篇章
- linux挂载iso镜像时报错的解决方法 mount: can't find cdrom in /etc /fstab or /etc/mtab
- Java中的大数处理类BigInteger和BigDecimar浅析
- javaAPI(异常)
- 四、数组
- 500 OOPS:cannot change directory:/root 问题的解决方法
- 在WPF中实现图片一边下载一边显示
- java用三种方法实现阶乘n!
- springmvc + jquery聊天室,逗比版
- JAVA_SE基础——17.方法的重载
- eclipse使用link方式安装android ADT插件
- Bitmap类getPixels()方法中参数stride理解
- how to make the XVim still available on xcode7