C语言基础知识-数组和字符串
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.数组概述
在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组。
数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
数组属于构造函数类型:
一个数组可以分解为多个数组元素:这些数组元素可以是基于数据类型。
二.一维数组
1>.一维数组的定义
数组名称符合标识符的书写规定(数字,英文字母,下划线) 数组名不能与其他变量名相同,同一作用域内是唯一的。 方括号[]中常量表达式表示数组元素的个数 int a[3] 表示数组a有3个元素。 其下班从0开始计算,因此3个元素分别为a[0],a[1],a[2] 定义数组时[]内最好是常量,使用数组时[]内即可是常量,也可以是变量。 数组定义格式: 数据类型 数组名[元素个数] 元素个数,代表该数组有多少个相同的数据类型的变量。 数组下标是从0开始的,到数组元素个数减1。 下标用来标识数组中的某一个元素,例如:int arr[10];arr[1]代表数组中的第二个元素。 数组下标越界:超过了数组元素个数的下标,如果操作越界数据会出现程序错误,比如乱码错误或者程序抛出异常。
2>.一维数组初始化的使用案例
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# cat array_demo01.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:y1053419035@qq.com */ #include <stdio.h> #define LEN 5 int main(void) { int scores[LEN]; int sum = 0; //可以通过数据类型求出数组大小 //int len = sizeof(scores)/sizeof(int); //也可以通过数组元素求出大小 int len = sizeof(scores) / sizeof(scores[0]); for (int i = 0;i < len;i++) { printf("请输入第%d名学生的成绩:>>> ",i+1); scanf("%d",&scores[i]); //再通过键盘为数组赋值的时候,需要写取地址符号[&] sum += scores[i]; } //打印成绩 for (int i = 0;i < len;i++) { printf("第%d名学生,成绩:%d ",i+1,scores[i]); } //计算平均成绩 printf("班级的平均成绩为:%d ",sum/10); return 0; } [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# gcc -o array_demo array_demo01.c -std=c99 [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# ./array_demo 请输入第1名学生的成绩:>>> 560 请输入第2名学生的成绩:>>> 680 请输入第3名学生的成绩:>>> 720 请输入第4名学生的成绩:>>> 496 请输入第5名学生的成绩:>>> 598 第1名学生,成绩:560 第2名学生,成绩:680 第3名学生,成绩:720 第4名学生,成绩:496 第5名学生,成绩:598 班级的平均成绩为:305 [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
3>.数组的内存结构
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# cat array_demo02.c /* @author :yinzhengjie blog:http://www.cnblogs.com/yinzhengjie EMAIL:y1053419035@qq.com */ #include <stdio.h> int main(void) { int scores[5] = {99,89,78,66,80}; printf("数组名对应的地址: %p ",scores); //打印数组名称 printf("数组第一个元素对应的地址: %p ",&scores[0]); //%p打印变量的内存地址,是以无符号十六进制格式打印,打印时需要在变量前加上取地址符号"&" printf("数组第二个元素对应的地址: %p ",&scores[1]); printf("数组第三个元素对应的地址: %p ",&scores[2]); printf("数组第四个元素对应的地址: %p ",&scores[3]); return 0; } [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# gcc -o array_demo02 array_demo02.c [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# ./array_demo02 数组名对应的地址: 0x7ffd9aad74a0 数组第一个元素对应的地址: 0x7ffd9aad74a0 #不难发现,数组的内存地址其实就是数组第一个元素的内存地址。 数组第二个元素对应的地址: 0x7ffd9aad74a4 #通过输出我们可以看出出来,scores数组中每一个元素地址间隔为4个字节大小,这是为什么呢?原因是一个int类型对应4个字节,而我们在scores数组中恰好存储了5个int类型的元素。 数组第三个元素对应的地址: 0x7ffd9aad74a8 数组第四个元素对应的地址: 0x7ffd9aad74ac [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
三.二维数组
四.
五.