一、一维数组

  1、什么是数组

  2、数组语法

  3、下标

  4、初始化

  5、数组名和数组首地址

  二、一维数组的应用

  1、数组的赋值与拷贝  

  2、数组的正反遍历

  3、随机数

  4、数组乱序

  5、数组的重复

  三、二维数组

  1、数组的数组

  2、二维数组的初始化

  3、二维数组的数组名

  四、二维数组的应用

  1、二维数组与二维表

  2、下标计算

一、一维数组

  1、什么是数组

  • 数组是用来存储多条相同数据类型的数据结构。(容器)

  分析关键点:

-多条
-类型相同

-数组是数据的容器,而非数据本身
-数组中的每一个数据,叫元素,数组由多个元素(数据)组成。-数据下标(索引)来区分数据中的元素
-元素从数组的位置0开始

-元素可以使用数组变量名[下标]来得到具体的元素-数组中元素的个数叫数组的长度
-数组所占空间=元素的类型*数组的长度
-数组是一段连续的内存区域 指针
-数组变量指向的区域,是数组在内存中的首地址

  2、数组语法

  • 定义数组: 元素类型 数组名[元素个数];

  int array[3];

  • 访问元素: 数组名[下标]

  array[0] = 10;

  3、下标

  • 下标是指访问数组元素时,中括号中的数字

  • 下标不能越界,如果越界,可能会导致以下后果:

–程序直接崩溃
–莫明的改变了其他变量或数据空间的值
–什么事儿都没有

  4、初始化

  • 赋使用的值

  int array2[3]={3,4,5};//依次给数组元素赋值
  int array4[3]={1,2};//如果赋值的个数少于数组 的长度,会 自动用0来填充后面的值

  • 赋零值

  int array[3];//未初始化 可能存在垃圾时

  int array3[3]={0};//数组中每个元素是0

  5、数组名和数组首地址

  • 数组名是一个地址,而且是不可变的地址

  • 数组名不可以做为左值,就是不能出现在赋值语句的左边。初始化除外。

  • 数组名是常量(指针)。 所以不能赋值

  二、一维数组的应用

  1、数组的赋值与拷贝  

  • 数组的赋值

int array[10];
array[2] = 10;//将数组的第三个元素赋值为10

  • 数组的拷贝

int array[10] = {1,2,3,4,5,6,7,8,9,0};

int num [10];
for (int i = 0; i < 10; i++)

  num[i] = array[i];

  2、数组的正反遍历

  • 数组的正向遍历

int array[10] = {1,2,3,4,5,6,7,8,9,0};

for (int i = 0; i < 10; i++)

  printf(“%d ”,array[i]);

  • 数组的反向遍历

for (int i = 9; i >= 0; i--)

  printf(“%d ”,array[i]);

  3、随机数

  • rand()函数用于生成一个随机数

  • srand()函数用于定义随机种子

int main() {

  srand((unsigned)time(0));   

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

    int x = rand() % 100;

  }

  printf("%d ", x);

  printf("\n");

  return 0;

}

  4、数组乱序

  • 数组乱序是指将数组中的元素随机排列

int main() {

  int array[10] = {1,2,3,4,5,6,7,8,9,0};

  srand((unsigned)time(0));
  for (int i=0; i<10; i++) {

    int x = rand() % (10 - i) + i;

     int temp = array[i];
    array[i] = array[x];

  }

  array[x] = temp;

  for (int i=0; i<10; i++)

    printf("%d ", array[i]);

  return 0;

}

  5、数组的重复

  • 数组元素的重复是指将数组中存在相同的数组元素

 

  三、二维数组

  1、数组的数组

  • 定义数组: 元素类型 数组名[元素个数] [元素个数];

int array[3][4];

  • 访问元素: 数组名[下标] [下标]

array[1][2] = 10;

  2、二维数组的初始化

  • 对应元素内容

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

  • 整体赋值

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

  • 依次赋值 自动补零

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

  3、二维数组的数组名

  • 二维数组名同样是一个地址,而且是不可变的地址

  • 二维数组名同样不可以做为左值,就是不能出现在赋值语 句的左边。初始化除外。

  • 二维数组名是常量(指针)。 所以不能赋值

  四、二维数组的应用

  1、二维数组与二维表

  • 二维数组其实是数组的数组
  • 可以将二维数组理解为一张几行几列的二维表。

  2、下标计算

  • 二维数组在内存中的存放方法是先存放列再存放行

eg:int array[3][4];

在内存的存放顺序是:

array[0][0]

array[0][1]

array[0][2]

array[0][3]

array[1][0]

array[1][1]

array[1][2]

array[1][3]

array[2][0]

array[2][1]

array[2][2]

array[2][3]

C语言基本语法——数组的更多相关文章

  1. [语法]C语言中二维数组做输入参数

    C语言中二维数组做输入参数时, 可以同时指定各维长度, 可以只指定第二维的长度, 不可以只指定第一维的长度, 不可以各维长度都不指定. 一句话总结:要指定至少指定第二维,都不指定是不行的. 具体栗子如 ...

  2. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  3. Java语言基本语法

    Java语言基本语法 一.标识符和关键字 标识符 在java语言中,用来标志类名.对象名.变量名.方法名.类型名.数组名.包名的有效字符序列,称为“标识符”: 标识符由字母.数字.下划线.美元符号组成 ...

  4. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

  5. Go语言基础之数组

    Go语言基础之数组 本文主要介绍数组(array)及它的基本使用. Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 ...

  6. C语言基础语法

    #include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ...

  7. R语言基本语法

    R语言基本语法 基本数据类型 数据类型 向量 vector 矩阵 matrix 数组 array 数据框 data frame 因子 factor 列表 list 向量 单个数值(标量)没有单独的数据 ...

  8. Smali语言基础语法

    1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...

  9. 02. Go 语言基本语法

    Go语言基本语法 变量.数据类型和常量是编程中最常见,也是很好理解的概念.本章将从 Go 语言的变量开始,逐步介绍各种数据类型及常量. Go 语言在很多特性上和C语言非常相近.如果读者有C语言基础,那 ...

随机推荐

  1. awk手册

    awk 手册 简体中文版由bones7456 (bones7456@gmail.com)整理. 原文:应该是 http://phi.sinica.edu.tw/aspac/reports/94/940 ...

  2. BZOJ 1367 [Baltic2004]sequence (可并堆)

    题面:BZOJ传送门 题目大意:给你一个序列$a$,让你构造一个递增序列$b$,使得$\sum |a_{i}-b_{i}|$最小,$a_{i},b_{i}$均为整数 神仙题.. 我们先考虑b不递减的情 ...

  3. swiper.js在隐藏/显示切换时,轮播出现bug的解决办法

    swiper在 swiper-container正常状态下显示,轮播是没有问题,但是当 swiper-container由隐藏切换至显示时(比如做图片查看时)会出现滑动bug,滑动卡顿而且最后一张可以 ...

  4. indy10中idtcpclient的使用问题[和大华电子称数据交换]

    在实际事务应用中,多次打开server进行大写.其中遇到一些问题,由于时间关系,没有好好整理,虽然问题解决了, 但原因和其他方法没有去进一步测试. 1.每个单元用本地TidTCPClient变量连接s ...

  5. Centos与Ubuntu命令

    1.虽然Centos与Ubuntu都是linux的内核,但使用命令还是有所差别 2.如在Centos中跟新插件用的是:yum -y   (yum后面有一个空格) 在Ubuntu中跟新插件用的是:apt ...

  6. ZOJ 3885 The Exchange of Items

    The Exchange of Items Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on ZJU. O ...

  7. 带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用。除非是main里的局部变量。因为main方法就是static的啊。

    带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用.除非是main里的局部变量.因为main方法就是static的啊.

  8. Android測试APP工具(一)

    近期面试APP开发者的时候,遇到了技术总监问 APP測试的概念性问题.后面感觉主要的项目流程.项目逻辑.屏幕适配. 測试是全然没有问题的.可是对于APP的性能測试.压力測试等高端的測试.还是存在着美中 ...

  9. CDH使用秘籍(一):Cloudera Manager和Managed Service的数据库

    背景 从业务发展需求,大数据平台须要使用spark作为机器学习.数据挖掘.实时计算等工作,所以决定使用Cloudera Manager5.2.0版本号和CDH5. 曾经搭建过Cloudera Mana ...

  10. POJ 1201 差分约束+SPFA

    思路: 差分约束,难在建图.(我是不会告诉你我刚学会SPFA的...) 把每个区间的ai–>bi连一条长度为ci的边. k–>k+1连一条长度为0的边. k+1–>k连一条长度为-1 ...