C语言中数组的总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言中数组的总结

目录

1.数组的定义

2.一维数组的创建和初始化

3.给数组元素赋值

4.数组下标越界

5.二维数组

6.多维数组

7.指针与一维数组

8.指针与多维数组

9.指针,数组与函数

10.变长数组

11.以上全部内容

数组的定义

1.数组:一系列相同数据类型的有序序列。

2.声明数组:

int states[50];

char code[28];

float candy[13]; 等等……

通过声明将会告知编译器三个信息:1)数组内含有多少元素2)元素的数据类型3)数组名

一维数组的创建和初始化

1.数组的初始化:在数组创建时,我们要为数组初始化。

int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};//数组的初始化

int months[ ]={ 31,28,31,30,31,30,31,31,30};//初始化时省略方括号中的数字,编译器会根据初始化列表中项数来确定数组的大小。(本例中数组的大小为9)const int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};//将数组设置为只读,这样程序只能从数组中检索值,不能把新值写入数组。(一旦声明为const,便不能再给他赋值)

以花括号括起来,用逗号分隔数组元素来初始化数组,逗号和值之间可以使用空格。

C const 与C++ const

区别一:c++允许在声明数组时使用const整数变量,而c不允许。

区别二:const定义的变量未初始化时,c会使用一个变量地址上的随机的值,c++会报错未初始化的const 'y'。

区别三:const int y;

const int *p2 =&y;

int * p1;

p1 = p2;//c++不允许这么做(从'const int*'到'int*' [- fper]的无效转换),c 会给出一个警告(赋值从指针目标类型中丢弃“const”限定符)

1)失败的初始化数组

a)未初始化数组:数组元素和未初始化的普通变量一样,编译器使用的值是内存地址上现有的值,使得数组储存的都是垃圾值。

b)初始化列表中的值少于数组元素个数时:编译器会把剩余未初始化的数组元素都初始化为0。

c)初始化列表中的值多于数组元素个数:编译器会将其视为警告,多余的值将会被作废。(在c++中将会将其视为错误)

d)存储的值与数组的数据类型不同时:编译器会将数值进行自动类型转换。

2)指定初始化器(c99):可以初始化指定的数组元素。

eg

int arr[6]={ [5] = 212}; //把arr[5]初始化为212

特性一:如果指定初始化器后面有更多的值,那么后面的值将被用于初始化指定元素后面的值。

eg

int months[12]={31, 31,30,31,[4] = 30, [1]=30,30,31,34};//数组的指定初始化

month[4]被初始化为30,其后跟着的month[5],month[6],month[7],被依次初始化31,31,30,month[1]被初始化30,month[2],month[3],month[4]被初始化30,31.

特性二:如果再次初始化指定的元素,那么最后的初始化将会取代之前的初始化。

eg

int months[12]={31, 31,30,31,[4] = 30, [1]=30,30,31,34};//数组的指定初始化

month[1]=30取代了前面的31,month[1]后面的34取代了前面的month[4]=30. 注意事项:int stuff[ ] = { 1, [6] = 23};//stuff有七个元素,不要误以为有两个元素

给数组元素赋值

方式:借助数组下标(或索引,偏移量)给数组元素赋值。

注意事项

一:不允许把数组当作为一个单元赋给另一个数组。

二:除初始化以外不允许使用花括号列表的形式赋值。

eg

int oxen[5] = {3,3,5,1}; //没问题

int yaks[5] ;

yaks =oxen; //不允许,数组不能当作另一个数组的赋值单位yaks[5]=oxen[5]; //允许,但是数组下标越界

yaks[5]={5,3,2,8}; // 不允许,除初始化以外不允许使用花括号列表的形式赋值

2.数组的创建:在创建数组时,我们必须定义数组的类型和大小,数

组的大小不能为0,数组中的元素类型都是相同的。

eg

int arr[10];//[ ]内必须是整型常量/常量表达式(3+8),sizeof(),但是const定义的值不能用做指定数组大小的值(C++不同),不能是一个变量(x...)(c99,c11之后创建了变长数组(VLA),允许使用变量)

1)数组的数据类型:普通变量可以使用的类型,数组元素都可以使用。当然数组还可以使用数组本身作为自己的数据类型,即数组的数组。

2)指定数组的大小

a)[ ]内必须是整型常量/常量表达式(3+8),sizeof(),但是const定义

的值不能用做指定数组大小的值(C++不同),不能是一个变量(x...)(c99,c11之后创建了变长数组(VLA),允许使用变量)

b)数组大小必须是整数且数组大小必须大于零

eg

int n =5;

int m =8;

float al[5];//可以

float a2[5*2+1];//可以

float a3[sizeof(int) +1];//可以

float a4[-4];//不可以,数组大小必须大于0

float a5[0];//不可以,数组大小必须大于0

float a6[2.5];//不可以,数组大小必须为整型

float a7[(int) 2.5];//可以,强制类型转换

float a8[n];//VLA c99之前不允许

float a9[m]; //VLA c99之前不允许

数组下标越界

产生的原因:c语言信任程序员,不检查边界,c可以运行的更快。

数组越界产生的影响

示例一:示例二:

int main(void) int main(void)

{ {

int i = 5; int i = 5;

相关文档
最新文档