【学习笔记】【C语言】数组
1. 什么是数组
数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的
2. 数组的特点
只能存放一种类型的数据,比如int类型的数组、float类型的数组
里面存放的数据称为“元素”
3. 定义
声明数组的类型
声明数组的元素个数(需要多少存储空间)
4. 格式
元素类型 数组名[元素个数];
比如:int ages[3];
5. 简单使用
简单初始化:int ages[5] = {19, 19, 20, 21, 25};
元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始
数组元素的访问:a[i]
6. 初始化
初始化方式
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};
常见错误
int a[];
int[4] a;
int a[b];
a = {10, 11};
a[4] = {10,9,8,5};
7. 内存分析
数组存储空间的大小
存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
数组名的作用,查看元素地址
数组越界的注意
8. 其他使用
数组与函数参数
数组元素作为函数参数
数组作为函数参数(sizeof注意)
遍历数组元素
两种方式遍历(while循环和for循环)
遍历元素值和元素地址
字符数组的使用
9.代码
- #include <stdio.h>
- int main()
- {
- // 使用注意
- // 都是正确写法
- //int ages[5] = {10 , 11, 12, 67, 56};
- //int ages[5] = {10, 11};
- //int ages[5] = {[3] = 10, [4] = 11};
- //int ages[] = {10, 11, 14};
- // 错误写法
- // int ages[];
- // 错误写法
- /* 只能在定义数组的同时进行初始化
- int ages[5];
- ages = {10, 11, 12, 14};
- */
- // 正确写法
- // int ages['A'-50] = {10, 11, 12, 14, 16};
- //int size = sizeof(ages);
- //printf("%d\n", size);
- // 正确写法
- /*
- int count = 5;
- int ages[count];
- ages[0] = 10;
- ages[1] = 11;
- ages[2] = 18;
- */
- //printf();
- // 错误写法
- // 如果想再定义数组的同事进行初始化,数组元素个数必须是常量,或者不写
- //int ages[count] = {10, 11, 12};
- int ages[] = {, , , };
- // 计算数组元素的个数
- int count = sizeof(ages)/sizeof(int);
- for (int i = ; i<count; i++)
- {
- printf("ages[%d]=%d\n", i, ages[i]);
- }
- return ;
- }
- // 数组的基本使用
- void arrayUse()
- {
- // 数组的定义格式: 类型 数组名[元素个数];
- int ages[] = {, , , , };
- // 19 19 28 27 26]
- ages[] = ;
- /*
- ages[0] = 19;
- ages[1] = 19;
- ages[2] = 28;
- ages[3] = 27;
- ages[4] = 26;
- */
- /*
- 遍历:按顺序查看数组的每一个元素
- */
- for (int i = ; i<; i++)
- {
- printf("ages[%d]=%d\n", i, ages[i]);
- }
- }
数组的内存储存细节
- #include <stdio.h>
- /*
- 提示用户输入5个学生的成绩,算出平均分并且输出
- */
- int main()
- {
- // 1.定义一个数组来存储成绩
- int scores[];
- // 2.提示输入成绩
- // 用来存储总分
- int sum = ;
- for (int i = ; i<; i++) {
- // 2.1 提示输入某个学生的成绩
- printf("请输入第%d个学生的成绩:\n", i + );
- // 2.2 存储当前学生的成绩
- scanf("%d", &scores[i]);
- // 2.3 累加成绩
- sum += scores[i];
- }
- // 3.计算平均分,并且输出
- printf("平均分是%f\n", sum/5.0);
- return ;
- }
- void test1()
- {
- // 1.定义一个数组来存储成绩
- int scores[];
- // 2.提示输入成绩
- printf("请输入第1个学生的成绩:\n");
- scanf("%d", &scores[]);
- printf("请输入第2个学生的成绩:\n");
- scanf("%d", &scores[]);
- printf("请输入第3个学生的成绩:\n");
- scanf("%d", &scores[]);
- printf("请输入第4个学生的成绩:\n");
- scanf("%d", &scores[]);
- printf("请输入第5个学生的成绩:\n");
- scanf("%d", &scores[]);
- // 3.计算平均分,并且输出
- int sum = ;
- for (int i = ; i<; i++) {
- sum += scores[i];
- }
- printf("平均分是%f\n", sum/5.0);
- }
- void test()
- {
- /*
- char cs[5]= {'a', 'A', 'D', 'e', 'f'};
- printf("%p\n", cs);
- for (int i = 0; i<5; i++) {
- printf("cs[%d]的地址是:%p\n", i, &cs[i]);
- }*/
- int ages[]= { , , };
- printf("%p\n", ages);
- for (int i = ; i<; i++) {
- printf("ages[%d]的地址是:%p\n", i, &ages[i]);
- }
- }
数组和函数
- #include <stdio.h>
- // 数组作为函数参数,可以省略元素个数
- // 数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
- void change(int array[])
- {
- //printf("array==%p\n", array);
- array[] = ;
- }
- void change2(int n)
- {
- n = ;
- }
- int main()
- {
- int ages[] = {, , , , , };
- //printf("ages==%p\n", ages);
- change(ages);
- //change2(ages[0]);
- printf("%d\n", ages[]);
- return ;
- }
练习
- /*
- 设计一个函数,找出整型数组元素的最大值
- */
- #include <stdio.h>
- int maxOfArray(int array[], int length)
- {
- // 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
- //int size = sizeof(array);
- //printf("array=%d\n", size);
- //sizeof(array);
- // 1.定义一个变量存储最大值(默认就是首元素)
- int max = array[];
- // 2.遍历所有元素,找出最大值
- for (int i = ; i<length; i++)
- {
- // 如果当前元素大于max,就用当前元素覆盖max
- if (array[i] > max)
- {
- max = array[i];
- }
- }
- return max;
- }
- int main()
- {
- int ages[] = {, , , , , , , , };
- int ages2[] = {, , , , , , , , };
- //int size = sizeof(ages);
- //printf("ages=%d\n", size);
- int max = maxOfArray(ages, sizeof(ages)/sizeof(int));
- printf("%d\n", max);
- return ;
- }
【学习笔记】【C语言】数组的更多相关文章
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- RX学习笔记:JavaScript数组操作
RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- C语言学习笔记之成员数组和指针
成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下. 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...
- matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size
一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...
- Fortran学习笔记:03 数组(Array)
Fortran学习笔记目录 书接上回:Fortran学习笔记:02 流控制语句 数组(Array) 定义数组 一维数组 program main implicit none integer :: i ...
随机推荐
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- WinForm特效:拦截窗体上各个部位的点击
windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息. 以下示例演示了最简单的效果片断: 他会把客户区和标题栏的效果互换,比如无法按住 ...
- OSG 实现跟随节点的相机(转)
本章教程将继续使用回调和节点路径(NodePath)来检索节点的世界坐标. 本章目标: 在一个典型的仿真过程中,用户可能需要从场景中的各种车辆和人物里选择一个进行跟随.本章将介绍一种将摄像机“依附 ...
- 简单方便统一封装的傻瓜式GET/POST库AliasNet正式公布~开源喽~
在进行网页自动化时我们做得最多的工作就是不停的往某个URL GET/POST数据并得到相应的Response,通过分析Response的结果再进行下一步操作,通过网页自动化我们可以做很多工作,比如去某 ...
- oc-32-@property示例
Goods.h #import <Foundation/Foundation.h> typedef struct{ int year; int month; int day; } MyDa ...
- systemtap-与 oracle 转
https://baoz.net/using-systemtap/ http://nanxiao.me/category/%E6%8A%80%E6%9C%AF/systemtap-%E7%AC%94% ...
- 使用@media实现IE hack的方法
文章简介:众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用“\0”,“\”和“\9”来仅让IE某些版本识别,而对于现代浏览器来说,他会直 ...
- php.ini的配置
一.user_agent ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') user_agent,再 ...
- 关于设置ScrollView的滚动条为隐藏的方法
要实现ScrollView滚动条的隐藏,有两种方法, 一种是在XML的ScrollView布局中加入属性android:scrollbars="none" 另一种则是在代码中获取S ...
- redis 简介
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...