1、 数组的基本概念

一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢?

1. 什么是数组

数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的

2. 数组的特点
● 只能存放一种类型的数据,比如int类型的数组、float类型的数组
● 里面存放的数据称为“元素”
2、 数组的定义
1. 定义
● 声明数组的类型
● 声明数组的元素个数(需要多少存储空间)
2. 格式

元素类型 数组名[元素个数];

比如:int ages[3];

3. 简单使用
● 简单初始化:int ages[5] = {19, 19, 20, 21, 25};
● 元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始
● 数组元素的访问:a[i]
4. 初始化
● 初始化方式
◆ 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}; 

// 错误写法

/* 只能在定义数组的同时进行初始化

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;

*/

// 错误写法

// 如果想再定义数组的同事进行初始化,数组元素个数必须是常量,或者不写

//int ages[count] = {10, 11, 12};

5. 内存分析
● 数组存储空间的大小
● 存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
● 数组名的作用,查看元素地址
● 数组越界的注意
6. 其他使用
● 数组与函数参数
◆ 数组元素作为函数参数
◆ 数组作为函数参数(sizeof注意)
● 遍历数组元素:

遍历:按顺序查看数组的每一个元素

◆ 两种方式遍历(while循环和for循环)
◆ 遍历元素值和元素地址
 #include <stdio.h>
int main()
{
int ages[] = {, , , }; // 计算数组元素的个数
int count = sizeof(ages)/sizeof(int); for (int i = ; i<count; i++)
{
printf("ages[%d]=%d\n", i, ages[i]);
} return ;
}
◆ 字符数组的使用
7. 习题
1> 提示输入5个学生的成绩,算出平均分(最高分、最低分),然后输出
 #include <stdio.h>
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 ;
}
2> 设计一个函数:int arrayMax(int a[], int count),找出数组元素的最大值
 #include <stdio.h>

 int arrayMax(int a[], int count)
{ // 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节 //int size = sizeof(a);
//printf("a=%d\n", size); //sizeof(a); // 1.定义一个变量存储最大值(默认就是首元素)
int max = a[]; // 2.遍历所有元素,找出最大值
for (int i = ; i<count; i++)
{
// 如果当前元素大于max,就用当前元素覆盖max
if (a[i] > max)
{
max = a[i];
}
} return max;
} int main()
{
int ages[] = {, , , , , , , , }; int ages2[] = {, , , , , , , , }; //int size = sizeof(ages); //printf("ages=%d\n", size);
int max = arrayMax(ages, sizeof(ages)/sizeof(int)); printf("%d\n", max);
return ;
}
3> 设计一个函数:int arraySum(int a[], int n),求一维数组a前n个数的和
 
4> 设计一个函数:将一维整型数组中的元素逆序存放。比如本来是1,3,4,2,逆序存放就变成了:2,4,3,1
3、 二维数组
1. 什么是二维数组
● 一个数组能表示一个班人的年龄,如果想表示很多班呢?
● 什么是二维数组?int ages[3][10]; 三个班,每个班10个人
● 相当于3行10列
● 相当于装着3个一维数组
● 二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
 
2. 存储
● 存储大小
● 存储结构和顺序
● 存储地址问题
3. 初始化
● int a[3][4] = {1,2,3,4,5,6};
● int a[3][4] = {{},{},{}};
● 数组元素简单访问
● int a[][5] = {3,21,31,2,32,1};
● 注意错误:

int a[3][4];

a[3] = {};

4. 遍历
● 遍历所有的元素
● 遍历地址
● 使用场合:五子棋、俄罗斯方块    

c语言的数组的更多相关文章

  1. 【算法】C语言实现数组的动态分配

    C语言实现数组的动态分配 作者:白宁超 2016年10月27日20:13:13 摘要:数据结构和算法对于编程的意义不言而喻,具有指导意义的.无论从事算法优化方向研究,还是大数据处理,亦或者网站开发AP ...

  2. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  3. go语言的 数组、slice、map使用(转)

    golang群 点击加入 go语言的 数组.slice.map使用, 由于网上有很好的说明, 不需要再写了,请看这几篇: Go语言中的 Array, Slice和 Map 深入学习golang五篇,以 ...

  4. go语言 类型:数组

    在go语言中数组array是一组特定长度的有序的元素集合. go的数组类型由两部分组成——类型和长度,二者缺一不可.数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定 ...

  5. C语言基础--数组及相关

    概念: 一堆相同类型的数据的有序集合 格式: 元素类型  数组名称[ 元素个数 ] 定义数组: // 定义了一个名称叫做scores的数组, 数组中可以存放3个int类型的数据 ]; // 只要定义一 ...

  6. 学习C语言的数组

    C语言的数组 数组声明的实例:int num[3];只要记下这个模板就好. 不建议使用变量定义数组,如果使用了变量定义数组,作为数组的元素的个数,不初始化的情况下是随机值,如果初始化会直接报错 注意: ...

  7. 对于C语言中数组名是指针的理解

    我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3, ...

  8. c语言中数组相关问题

    c语言中数组相关问题: 1.数组基本定义: 相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组 ...

  9. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

  10. C语言入门(16)——C语言的数组

    和结构体类似,数组也是一种复合数据类型,它由一系列相同类型的元素组成.C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必 ...

随机推荐

  1. HTML5之window.applicationCache对象

    不知道离线缓存技术的可以参照上一篇文章: HTML5之appcache语法理解/HTML5应用程序缓存/manifest缓存文件官方用法翻译 参考文章 window.applicationCache  ...

  2. Java8系列之初识

    前言:终于有机会在工作中使用高版本的Java8,但是一直没有对java8中添加的新特性进一步了解过,所以趁着这个机会学习一下,能够在编程中熟练的使用. 一.接口的改变 我们知道,在java8版本以前, ...

  3. ASP.NET没有魔法——Identity与Owin

    上篇文章介绍了如何在ASP.NET MVC项目中引入Identity组件来实现用户注册.登录及身份验证功能,并且也提到了Identity是集成到Owin中的,本章就来介绍一下什么是Owin以及如何使用 ...

  4. CentOS7.3安装NVIDIA-1080ti驱动、cuda、cudnn、TensorFlow

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 Ubuntu非要换centOS...好吧... 看了很多是通过ELRepo源安装驱动,不过我没 ...

  5. 汇总一些知名的 JavaScript 开发开源项目

    汇总一些知名的 JavaScript 开发开源项目   转自:CTOLib , www.ctolib.com/topics-107352.html ggraph - 图形可视化的凌乱数据 这是一个建立 ...

  6. 五、在IDEA中使用GIt版本控制并将本地代码上传至Github

    一.安装git     Git工具下载:https://git-scm.com/downloads 从官网下载.安装很简单,基本都是下一步. 安装完的第一件事情就是创建一个Git用户: git con ...

  7. 使用angular4和asp.net core 2 web api做个练习项目(三)

    第一部分: http://www.cnblogs.com/cgzl/p/7755801.html 第二部分: http://www.cnblogs.com/cgzl/p/7763397.html 后台 ...

  8. MUI点击事件获取当前对象,及当前对象的属性值

    //用惯了jquery,开始用mui还是有些不习惯 //直接贴代码吧 <nav class="mui-bar mui-bar-tab"> <a class=&qu ...

  9. linux学习(六)绝对路径、相对路径、cd、mkdir、rmdir、rm

    一.绝对路径 就是从根开始的,如:/root./usr/local. 二.相对路径 相对于当前路径的,比如我们在当前路径下建立了一个a.txt. [root@iZ25lzba47vZ ~]# pwd ...

  10. WebService WSDL结构分析

    转载地址:http://blog.csdn.net/sunchaohuang/article/details/3076375      WSDL (Web Services Description L ...