第五章 数组(1):数组声明和初始化

搞了一年多的android ,现在又回到c语言了,最基础的都不知道了,今天声明数据居然还用变量做大小,罪过啊

数组(array)是若干同类变量的聚合,允许通过统一的名字引用其中的变量。其特定元素通过下标(index)访问。C语言的数组由连续的内存区构成,最低地址对应首元素,最高地址对应末元素。

保存数组所需要的内存量直接与基类型和数组大小有关。对一维数组而言,以字节为单位的总内存量可以这样来确定:

总字节数 = sizeof (基类型)×数组长度

例如,一维数组x

int x[100];

它所占内存字节数目为sizeof(int)×100=4×100=400个字节数。它在内存中排列如下:

元素 x[0]      x[1]       x[2]   ...    x[98]      x[99]

地址 0x004000  0x004004   0x004008...   0x004260   0x004264   0x004268

可见,一维数组就是在连续内存中按下标顺序存储的同类信息组成的表。

在C语言中,框住下标的方括号([])实际上被看成一个运算符,与圆括号(())具有相同的优先级。下表归纳了一些运算符的优先级(从上到下递减):


运   算   符


结   合   性


类   型


() []


从左到右


最高


++  --  !(type)


从右到左


单目运算符


* / %


从左到右


乘除运算符


+  -


从左到右


加减运算符


<  <=  >  >=


从左到右


关系运算符


==  !=


从左到右


相等测试运算符


&&


从左到右


逻辑与


||


从左到右


逻辑或


? :


从右到左


条件运算符


=  +=  -=  *=  /+  %=


从右到左


赋值运算符


,


从左到右


逗号运算符

C语言中最常用的数组是串(string),它是以空(null)字符结束的一位字符数组。

5.1数组声明和初始化

一维数组的定义形式:

type var_name[size];

这里,type定义了数组的基类型(base-type),即数组中各元素的类型。size定义了数组的元素数目。C89规定,必须用常数指定数组的大小。如:

double balance[100];

数组通过下标引用数组名来访问它的元素。如:

balance[13] = 12.34; /* 为balance的3号元素赋值 */

注意,C语言的数组的首元素的下标是0。

示例:加载由0~99组成的一个整型数组。

1   #include <stdio.h>

2

3   int main(void)

4   {

5       int x[100];   /* 定义一个100元素的整型数组 */

6       int t;

7

8       /* 初始数组x,其值从0到99 */

9       for ( t=0; t<100;
++t ) x[t] = t;

10

11      /* 显示x,100行 */

12     printf( "Index\tValue\n", x[t]
);

13      for( t=0; t<100;
++t ) printf( "%d\t%d\n", t, x[t] );

14

15      return 0;

16  }

数组在声明时,其各个元素的值是随机的,可以在数组声明时初始化它,如例子中的第五行

5       int x[100];

可以这样来写以初始化:

5       int x[100] = {
0 };

这表示数组x的首个元素被初始化为0,由于初始化值的个数比数组元素个数少,因此其余的99个元素都被自动初始化为0。也可以这样为数组初始化:

int y[5] = {
33, 2, 0, 6, 54 };

这样就为一个五个元素的整型数组初始化全部值。但下面的做法是错误(语法错误):

int y[5] = {
33, 2, 0, 6, 54, 45 };

由于声明为数组只有五个元素,因此初始化的值也只能小于等于五。

有时,如果声明数组的同时初始化它,可以省略声明的数组的大小,其元素个数由初始化值的列表数目确定:

int y[] = {
33, 2, 0, 6, 54 };

这是一个具有五个元素的数组。

注意,C语言不检查数组的边界,因此程序可以在数组的两边越界。如上例第九行可以这样写,尽管这导致溢出:

for ( t=0; t<=100;
++t ) x[t] = t;

这时, x[100] = 100; 已经越界,这可以通过编译,运行时也不一定会发生错误。程序员必须在必要时加入边界检查。

5.2 数组指针和数组作为函数参数

直接引用数组名字而不用下标,就可以产生指向数组首元素的指针,不需要用取地址符号&。如:

int *ptr;

ptr = x; /* 无需&x[0] */

时间: 2024-08-24 10:07:39

第五章 数组(1):数组声明和初始化的相关文章

第五章:1.数组和广义表 -- 数组

前言: 2.3.4章讨论的线性结构中的数据元素都是非结构的原子类型,元素的值是不再分解的.本章讨论的两种数据结构---数组和广义表可以看成是线性表在下述含以上的扩展:表中的数据元素本身也是一个数据结构. 其中.数组是一种比较熟知的数据类型,几乎所有程序语言都把数组类型设定为固有类型,前两节节以抽象数据类型的形式讨论数组的定义和实现,使读者加深对数组的理解. 目录: 1.数组的定义 2.数组的顺序表示和实现 3.矩阵的压缩存储 4.广义表的定义 5.广义表的存储结构 6.m元多项式的表示 7.广义

第五章 指针与数组

5.2 指针与函数参数 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int getch(void); void ungetch(int); /*getint 函数:将输入中的下一个整型数赋值给*pn */ int getint(int* pn) { int c, sign; while (isspace(c = getch())) /*跳过空白符*/ ; if (!isdigit(c) &&

K&amp;R——第五章 指针与数组

#include <stdio.h> #define maxsize 5000 char buf[maxsize]; char *head = buf; char *new(int size) { //分配元素字长 //可用内存分配完毕 if (maxsize - (buf - head) < size) return 0; head += size; return head - size; } int *arr; int *arr2; char *str; int main() { a

第五章:数组/Array/Tuple/yield

数组 如果需要使用同一类型的多个对象,就可以考虑使用集合和数组.如果需要使用不同类型的多个对象,可以考虑使用Tuple(元组) 数组的声明 在声明数组时,应先定义数组元素中的类型,其后是一对空方括号和变量名 int[] myAyyay;  数组初始化 声明了数组之后,就必须为数组分配内存,以保存数组的元素,数组是引用类型,所以必须给它分配堆上的类型,为此,需要使用new运算符,指定数组元素的数据类型和数量来初始化数组 myArray=new int[10]; 在指定了数组大小后,如果不复制数组中

Java初学者:数组,声明以及初始化

今天我们说一下java里面的数组,数组在编程语言里的意思,相当于离散数学里面的集合,其意义几乎完全一样,只有一点区别,离散里有无穷集合,比 如,实数集,但是在java里是不存在无穷集合的.在java里,数组就是一些数据的集合.作为我们这些菜鸟,大多数情况下见到的数组,其中的数据都属于 同一类型.少数情况下不属于同一类型,那很有可能发生了多态现象,而且在访问数组元素的方法时,很可能产生了动态绑定,这些我们以后再说. 好了,让我们目前先认为数组里的元素都属于同一类型.那么,怎样声明以及初始化一个数组

Java基础知识二次学习--第五章 数组

第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 栈里面存的数组的引用 实际对象在堆内存里面 (C与C++是分配在栈里的) 内存图: 元素为引用数据类型的数组 引用类型的数组如上图 时间:2017年4月26日15:16:22~2017年4月26日15:19:00 章节:05章_02节  视频长度:05:25 内容:数组元素的创建与使用 心得: 首

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j

第五章:数组 结构体 和联合体

1.结构体 2.联合体 3.结构体和联合体的操作 4.非压缩数组 5.压缩数组 6.数组操作 7.数组foreache 循环 8.用于数组的特殊系统函数 结构体 1.结构体成员可以是任何数据类型 包括基本类型和用户自定义类型 2.结构体的声明 var/wire 都可以定义为结构体类型.当定义为结构体类型时,结构体中的成员都必须是四态类型,成员不能是wire类型. 3.结构体的初始化 用值列表方式初始化 '{} 4.结构体的赋值 5.压缩结构体 可以视为独立的变量,具体与向量类似的操作 6.非压缩

第五章 2 数组

数组在内存中连续排列 1 数组是可以在内存中连续存储多个元素的结构,数组中的 所有元素必须属于相同的数据类型 ? 一维数组声明的基本格式为: ? 类型 数组名[数组元素个数]; ? 比如,声明语句: ? double sz[6]; 告诉编译器3条信息:数组名是sz,存放的元素是double型,数组存放的元素个数为6,这样,便可以对数组及数组元素进行读写访问. 要防止下标越界的错误发生,对上面声明的数组sz来说,有效的下标是0到5,在程序中如果出现了sz[6],编译器有时并不会报错,但这可能引起程