一、数组的概念

用来存储一组数据的构造数据类型

特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。

二、数组的定义

格式: 类型 数组名[元素个数];

举例:存储5个人的年龄

Int agrs[5]; //在内存中开辟4x5=20个字节的存储空间

可以在定义数组的同时对数组进行初始化:

Int ages[5]={17,18,19,20,21};

遍历数组:

For(int i=0;i<5;i++)

{

Printf(“ages[%d]=%d\n”,i,ages[i]);

}

注意:

(1)数组的初始化

①. Int ages[5]={17,18,19,20,21};//一般写法

②. Int ages[5]={17,18};//只对前两个元素赋值

③. Int ages[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个

④. Int ages[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。

⑤. Int ages[];//错误,编译器无法知道应该分配多少的存储空间

⑥. Int ages[5];ages={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化

⑦. Int ages[‘A’]={1,2,3};//正确,相当于是ages[65]

⑧. Int count=5;int ages[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,ages[0]=1;ages[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。

⑨. 而int count=5;int ages[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量

(2)计算数组元素

当没有表明数组元素个数时,如何对其进行遍历(要求使用数组元素个数)?

可以使用sizeof运算符来计算数组元素的个数

Int count=sizeof(ages)/sizeof(int); //数组的总长度除以单个的长度等于元素个数

三、数组内存存储细节

假设有数组如下:

Int x[]={1,2};

Char ca[5]={‘a’,‘A’,‘B’,‘C’,‘D’};

数组名即代表数组的地址,数组的地址==数组名(ca)==数组的首元素的地址&ca[0]

在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列存储,整个数组的地址为首元素的地址。

模拟该数组的内存存储细节如下:

注意:字符在内存中是以对应ASCII值的二进制形式存储的,而非上表的形式。

在这个例子中,数组x的地址为它的首元素的地址0x08,数组ca的地址为0x03。

四、数组-传址调用

Void change(int array[]) //数组可以作为函数的形参,可以省略数组元素的个数

{

Array[0]=100;

}

Void change2(int a)  //基本类型作为函数的形参

{

a=200;

}

Int main()

{

Int ages[5]={1,2,3,4,5};

Change2(ages[0]);

Change(ages);

Return 0;

}

Array数组与ages数组的地址一致,若以数组作为函数的参数,这种传递方式是传址调用,传递的是整个数组的地址,修改形参数组元素的值,就是修改实参的值。

当你把一个数组当做参数来传递时,它会看做是一个指针,在该函数体内使用sizeof运算符来计算数组的长度,得出的数值永远为8,而非数组的实际长度,因为任何类型的指针都占8个字节的存储空间。

提示:数组作为一个函数的参数时,如果函数体涉及到数组遍历等操作,通常把数组的实际元素个数也作为参数传递给函数。

如 void maxofarray(int array[],sizeof(ages)/sizeof(int)){....}

五、二维数组

Int ages[50];//数组能够存放50个int类型的数据

Int ages1[3][10];//数组能够存放3个数组,每个数组存放10个数值,共3x10=30个述职数值。

一个二维数组a,a包括两个一维数组a[0]和a[1],每个一维数组都包括三个元素。

使用场合:五子棋,俄罗斯方块等,

假设:

char Y[3][2]={

{‘A’,‘B’},

{‘C,‘D’},

{‘E,‘F’}

};

内存情况:

李洪强-C语言3-数组的更多相关文章

  1. 李洪强-C语言1-指针

    C语言指针 前导程序   一.基本知识点 Int a=10; Int *p;//定义一个int类型的指针 P=&a;//指针变量p指向了变量a *p=20;//使用指针不通过变量直接修改变量a ...

  2. 李洪强-C语言9-C语言的数据,变量和常量

    一.数据 图片文字等都是数据,在计算机中以0和1存储. (一)分类 数据分为静态数据和动态数据. ①. 静态数据:一些永久性的的数据,一般存储在硬盘中,只要硬盘没坏数据都是存在的.一般以文件的形式存储 ...

  3. 李洪强-C语言2-字符串

      C语言字符串 一.字符串基础 注意:字符串一定以\0结尾. Printf(“yang\n”); 其中yang为字符串常量,“yang”=‘y’+‘a’+‘n’+‘g’+‘\0’.字符串由很多的字符 ...

  4. 李洪强-C语言关键字、标识符和注释

    一.关键字 C语言提供的有特殊含义的符号,共32个. 在Xcode中关键字全部高亮显示,关键字全部都为小写.如return.int等. 二.标识符 定义:标识符是程序员在程序中自定义的一些符号和名称. ...

  5. 李洪强 - C语言8-Scanf函数

    C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间 ...

  6. 李洪强-C语言7-C语言运算符

    C语言运算符 一.算术运算 C语言一共有34种运算符,包括常见的加减乘除运算. ①. 加法:+ 还可以表示正号 ②. 减法:- 还可以表示负号 ③. 乘法:* 非数学意义上的X ④. 除法:/  注意 ...

  7. 李洪强-C语言6-控制结构

    C语言流程控制 一.流程控制结构 (1)顺序结构:按书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某 ...

  8. 李洪强-C语言5-函数

    C语言函数 一.函数 C语言程序是由函数构成的,每个函数负责完成一部分的功能,函数将工恩呢该封装起来,以供程序调用. 二.函数定义 目的:将一些常用的功能封装起来,以供日后调用. 步骤:确定函数名,确 ...

  9. 李洪强-C语言4-内存分析

    C语言内存分析 一.进制 概念:进制是一种计数方式,是数值的表现形式 4种主要的进制: ①. 十进制:0~9 ②. 二进制:0和1 ③. 八进制:0~7 ④. 十六进制:0~9+a b c d e f ...

随机推荐

  1. iOS 保存CGRect,CGPoint到NSArray'的方法

    由于CGRect和CGPoint等对象是Struct,即结构体,不是继承于NSObject的,所以需要先用NSValue的方法,把他们转化成NSValue对象,之后就可以存入NSArray了! @in ...

  2. (原创)Python文件与文件系统系列(4)——文件描述字操作

    文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Py ...

  3. 3.前端笔记之JavaScript基础

    作者:刘耀 部分内容参考一下链接 参考: http://www.cnblogs.com/wupeiqi/articles/5369773.html http://javascript.ruanyife ...

  4. Servlet之Cookie操作

    Java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题. 1,建立一个无生命周期的cookie,即随着浏览器的关 ...

  5. css3学习总结4--CSS3背景

    css3背景 1. background-size 2. background-origin 3. background-clip 示例: className { background:url(bg_ ...

  6. Linux配置SSH公钥认证与Jenkins远程登录进行自动发布

    公钥认证,是使用一对加密字符串,一个称为公钥(public key), 任何人都可以看到其内容,用于加密:另一个称为密钥(private key),只有拥有者才能看到,用于解密. 在使用jenkins ...

  7. 什么是网络爬虫(Spider) 程序

    Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序.它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访 ...

  8. 使yum保留下载的rpm包

    [root@14LN yum]# egrep 'cachedir|keepcache' /etc/yum.conf #cachedir=/var/cache/yum/$basearch/$releas ...

  9. js伪数组及转换

    什么是伪数组 能通过Array.prototype.slice转换为真正的数组的带有length属性的对象. 这种对象有很多,比较特别的是arguments对象,还有像调用getElementsByT ...

  10. 脚踏实地学C#2-引用类型和值类型

    引用类型和值类型介绍 CLR支持两种类型,引用类型和值类型两种基本的类型: 值类型下有int.double.枚举等类型同时也可以称为结构,如int结构类型.double结构类型,所有的值类型都是隐式密 ...