推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

每日干货丨C语言数组

   2023-07-07 网络整理佚名1090
核心提示:a[4];就定义了一个长度为4的整型数组,名字是a。数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:「数组内存是连续的」这一点很重要,所以我使用了一个大标题来强调。上面的代码是先定义数组再给数组赋值,我们也可以在定义数组的同时赋值,例如:如给全部元素赋值,那么在定义数组时可以不给出数组长度。

首先举个例子,输出一个4×4的整数矩阵,代码如下:

  1. #include

  2. #include

  3. int main()

  4. {

  5. int a1=20, a2=345, a3=700, a4=22;

  6. int b1=56720, b2=9999, b3=20098, b4=2;

  7. int c1=233, c2=205, c3=1, c4=6666;

  8. int d1=34, d2=0, d3=23, d4=23006783;


  9. printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);

  10. printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);

  11. printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);

  12. printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);


  13. system("pause");

  14. return 0;

  15. }

运行结果:

20        345       700       22
56720 9999 20098 2
233 205 1 6666
34 0 23 23006783

矩阵中有16个整数,我们为每个整数定义一个变量,即16个变量。 那么,为了减少变量数量,让开发更加高效,是否可以为多个数据定义一个变量呢? 例如,将每一行的整数放入一个变量中,或者将所有 16 个整数放入一个变量中。 答案当然是可以的,办法就是使用数组(Array)。

数组概念和定义

我们知道,为了将数据放入内存,首先必须分配内存空间。 放入4个整数,就必须分配4个int类型的内存空间:

int a[4];

这样,内存中就分配了4个int类型的内存空间,总共4×4=16字节,并给它们起了一个名字,叫做a。

我们把这样的数据集合称为数组(Array),它包含的每个数据称为数组元素(),包含数据的数量称为数组长度(),例如int a[4]; 定义了一个长度为4的整型数组,名称为a。

数组中的每个元素都有一个序号,它从0开始,而不是我们熟悉的1,称为下标(Index)。 使用数组元素时,只需指定下标,形式为:

arrayName[index]

是数组名,index是下标。 例如,a[0]代表第0个元素,a[3]代表第3个元素。

接下来,我们将第一行的 4 个整数放入数组中:

a[0]=20;
a[1]=345;
a[2]=700;
a[3]=22;

这里0,1,2,3是数组下标,a[0],a[1],a[2],a[3]是数组元素。

在学习过程中,我们经常使用循环结构将数据放入数组(即对数组元素一一赋值),然后使用循环结构输出(即读取值)​​​​依次排列数组元素),下面我们来演示一下如何将1到10这十个数字放入数组中:

  1. #include

  2. int main(){

  3. int nums[10];

  4. int i;


  5. //将1~10放入数组中

  6. for(i=0; i<10; i++){

  7. nums[i] = (i+1);

  8. }


  9. //依次输出数组元素

  10. for(i=0; i<10; i++){

  11. printf("%d ", nums[i]);

  12. }


  13. return 0;

  14. }

运行结果:

1 2 3 4 5 6 7 8 9 10

变量i既是数组下标,又是循环条件; 以数组下标作为循环条件,到达最后一个元素时循环结束。 数组nums的最大下标为9,即不能超过10,所以我们规定循环的条件为i

更改上面的代码,让用户输入 10 个数字并将它们放入一个数组中:

  1. #include

  2. int main(){

  3. int nums[10];

  4. int i;


  5. //从控制台读取用户输入

  6. for(i=0; i<10; i++){

  7. scanf("%d", &nums[i]); //注意取地址符 &,不要遗忘哦

  8. }


  9. //依次输出数组元素

  10. for(i=0; i<10; i++){

  11. printf("%d ", nums[i]);

  12. }


  13. return 0;

  14. }

运行结果:

22 18 928 5 4 82 30 10 666 888↙
22 18 928 5 4 82 30 10 666 888

第八行代码中,scanf()读取数据时需要一个地址(该地址用于指示数据的存储位置),而nums[i]代表具体的数组元素,所以我们需要在前面添加&获取地址。

最后我们总结一下数组是如何定义的:

dataType  arrayName[length];

是数据类型, 是数组名称, 是数组长度。 例如:

  1. float m[12]; //定义一个长度为 12 的浮点型数组

  2. char ch[9]; //定义一个长度为 9 的字符型数组

必须要注意的是:

1)数组中每个元素的数据类型必须相同,对于int a[4];来说,每个元素必须是int。

2)数组的长度最好是整数或者常量表达式,比如10、20*4等,这样可以通过所有编译器运行; 如果包含变量,如n、4*m等,在某些编译器下会报错。

3)访问数组元素时,下标的取值范围为0≤index<。 如果太大或太小,都会超出限制,导致数组溢出,出现不可预测的情况。 请注意。

数组内存是连续的

数组是一个整体,其内存是连续的; 也就是说,数组的元素是相邻的,并且它们之间没有间隙。 下图演示了int a[4]的存储情况; 在记忆中:

“数组内存是连续的”非常重要,所以我用了一个大标题来强调。 连续内存有利于指针操作(通过指针访问数组元素)和内存处理(整个内存块的复制、写入等),这使得数组可以用作缓存(临时存储数据的一块内存) )。 你可能暂时不明白这句话是什么意思,但是等你了解了指针和内存的时候自然就明白了。

数组初始化

上面的代码是先定义数组,然后给数组赋值。 我们还可以在定义数组的同时赋值,例如:

int a[4] = {20, 345, 700, 22};

数组元素的值由 { } 包围,每个值之间用 , 分隔。

对于数组的初始化,需要注意以下几点:

1)只能给某些元素赋值。 当{ }中的值的个数小于元素的个数时,只给元素的第一部分赋值。 例如:

int a[10]={12, 19, 22 , 993, 344};

表示只对a[0]~a[4]这5个元素赋值,后面5个元素自动初始化为0。

当分配的元素少于数组总元素时,剩余元素自动初始化为0:

我们可以通过以下形式将数组的所有元素初始化为 0:

int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};

由于其余元素会自动初始化为0,因此只需将第0个元素赋值为0即可。

2)只能给元素一一赋值,不能给整个数组赋值。 例如,要将值 1 分配给所有 10 个元素,您只能编写:

int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

而不是写:

int a[10] = 1;

3)如果给所有元素赋值,定义数组时可以不给出数组的长度。 例如:

int a[] = {1, 2, 3, 4, 5};

相当于

int a[5] = {1, 2, 3, 4, 5};

当您读完文章后,别忘了再次点击阅读,转发支持小编!

扫描下方微信二维码

 
标签: c语言 赋值 数组
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON