C语言数组

数组

数组(array)是同于存储的一系列类型相同的数据。数组有一个数组名,通过下标访问数组中的元素(element)。

数组的定义语法

dataType arrayName[length];
//其中,dataType为数据类型,arrayName为数组名,length为数组长度。
例如
double money[20];
/*声明的money是一个内含20个元素的数组,每个元素都是一个double类型的值。数组的第一个元素是money[0],
第二个元素是money[1],以此类推,直到money[19]。注意,数组元素的编号从0开始,不是从1开始。可以给每个
元素赋double类型的值,比如*/
money[0]=10.5;
money[1]=12.55
money[2]=100.6
...
money[20]=1200.3
  • 定义数组的时候,数组的长度必须是整数,可以是常量也可以是变量。
  • 数据的下标也必须是整数,可以是常量,也可以是变量。
  • 使用数组元素和使用同类型变量一样。例如,可以这样把值读入指定元素中:
    scanf("%lf",&money[4]);//把一个值读入数组的第五个元素。

数组可以是任意类型的数据

int iArray[10];//定义int型数组
double dArray[10];//定义double类型数组
char cArray[10];//定义char型数组 

数组的初始化

采用memset函数对数组进行初始化,如下

memset(iArray,0,sizeof(iArray));
memset(dArray,0,sizeof(dArray));
memset(cArray,0,sizeof(cArray));
//第一个参数是数组名,第二个参数填0,第三个参数是数组占用的内存空间,用sizeof(变量名)获取。

注意事项:

  • 定义数组的时候,数组的大小必须是整数,可以用常量和变量。
    int size = 100;
    iibt numeber[size];
    在很久以前,数组是只支持常量的,后来支持了变量,有些旧教材仍认为只支持常量,但显然不是了。
    对于C语言这是一个进步,C语言的动态内存技术的应用范围将变得更小。
  • 使用数组的时候,数组的下标也必须是整数,可以用常量和变量。
  • 使用数组的时候 C语言并不会检查下标是否正确,但是在程序中下标一定不能越界。当运行程序时下标越界,这会导致数据被放置在已经被其他数据占用的地方,可能会破坏程序的结果甚至导致程序异常中断,后果异常严重。比如
int ii = 0;
int number[5];
for(ii=0;ii<100;ii++)
{
	number[ii]=ii;//数组只有五个元素,这样些会使数组有100个元素,超出范围
}

运行结果会是段错误(core dumped),就是非法内存操作,会导致程序崩溃。

在for循环中运用数组

利用for循环取访问数组的每一个元素,实现遍历。
比如,我们要统计每个同学的身高可以这样写。

int studentHeight[20];
for(int ii = 0;i<20;i++)
{
	printf("请输入第%d名的体重",ii+1);
	scanf("%d",studentHeight[ii]);
	} 
//这样就通过for循环为数组的20个元素依次赋予输入值

二维数组

在生活中,随处可见二维数组。比如一栋房子有10层,每层都有两户人家。

二维数组的定义

dataType arrayName[length1][length2];
//其中,dataType为数据类型,arrayName为数组名,length1为一维下标,length2为二维下标。

我们可以把二维数组看作一个excel表格,一维为行,二维为列。想要在二维数组中精确的找到某个元素,需要确定行和列。比如,

int troop[5][4];
//这就定义了一个五行四列的数组,一共有5*4=20个元素。
也可以看作坐标,一个元素就是一个坐标对数,想要确定元素坐标,需要知道他的横坐标和纵坐标。

二维数组的初始化

二维数组的初始化也是用memset函数,例如memset(troop,0,sizeof(troop));

多维数组

从二维数组就能推断出多维数组的定义方法,但在实际应用中二维数组的使用非常的少。

C语言中的字符串

字符串是一个特别的字符数组,如果字符数组包含表示字符串末尾的空字符‘\0’,则该数组中的内容就构成了一个字符串。
'\0’可以直接写成0。

you can do it.
是字符数组,不是字符串
you can do it.\0//“\0”表示空字符
即是字符数组,也是字符串。
这是约定俗成的规则,没有道理
因为需要用“\0”空字符结尾,所以定义字符串的时候,字符串的长度要多预留一个字节。
char strName[21]//这便是定义一个最多放20个字符或者10个汉字的字符串。
空字符“\0”,也就是0,假设我们想把hello写入字符串可以这样写

char strHello[0]='H';
char strHello[1]='e';
char strHello[2]='l';
char strHello[3]='l';
char strHello[4]='o';
char strHello[5]='\0';//或者char strHello[5]=0;也可以

那么,如果我们的结尾不用空字符\0会怎么样?

答案是会产生乱码,比如hello!,hello~,hello$等等,因为,如果最后不用空字符,数组会一直寻找最后一个元素,就会找到一些莫名其妙的垃圾值。

字符串数组

以0结束的一维字符数组是一个字符串,给一维字符数组加上一维,就是字符串数组了。

char strname[21];   //可以存放20个字符的字符串
memset(strname,0,sizeof(strname));
strcpy(strname,"我可以存放十个汉字");

char strname[10][21];//10个字符串,每个字符串可以存放20个字符
memset(strname,0,sizeof(strname));
strcpy(strname[0],"妲己")strcpy(strname[1],"西施")strcpy(strname[2],"貂蝉")strcpy(strname[4],"王昭君")strcpy(strname[5],"小乔")...
strcpy(strname[9],"甄姬")

字符串数组是一个二维数组,定义了单个字符串的长度,和字符串的数量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值