定义数组

●<类型>变量名称[元素数量];

● int grades[100];

●double weight[20];

●元素数量必须是整数

●C99之前:元素数量必须是编译时刻确定的字面量

●是一种容器(放东西的东西)

●其中所有的元素具有相同的数据类型;

●一旦创建,不能改变大小

●*(数组中的元素在内存中是连续依次排列的)

●可以出现在赋值的左边和右边

 数组的单元

●数组的每个单元即使数组类型的一个变量

●使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数(下标从0开始计数时C语言开始,为了方便编译器)

有效的下标范围

编译器对运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写

●一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃

segmentation fault

●但是也可能运气好,没造成严重的后果

●所以这是程序员的责任来保证程序只使用有效的下标值:[0,数组的大小—1]

数组的集成初始化

int a[]={,,,,,,,8,9};

●直接用大括号给出数组的所有元素的初始值

●不需要给出数组的大小,编译器替你数数

集成初始化时的定位(C99 Only)

int a[]={
[]=,[]=,,
}; //a[3]=6

●用[n]在初始化数据中给出定位

●没有定位的数据接在前面的位置后面

●其他位置的值补零

●也可以不给出数组的大小,让编译器算

●特别适合初始数组稀疏的数组

数组的大小

●sizeof 给出整个数组所占据内容的大小,单位是字节

sizeof(a)/sizeof(a[0])

●sizeof(a[0])给出数组中单个元素的大小

●这样的代码,一旦修改数组中的初始数据,不需要修改遍历的代码

数组的赋值

int a[]={,,,,};
int b[]=a;//错误写法

●数组变量本身不能被赋值

●要把一个数组所有的元素交给另一个数组,必须采用遍历

for(i=;i<length;i++){
b[i]=a[i];
}

数组的遍历

通常都是使用for循环,让循环变量i从0到<数组的长度,这样循环体内最大的i正好是数组最大的有效下标

常见错误是:

●循环结束条件是<=数组长度,或

●离开循环后,继续用 i 的值来做数组元素的下标!

数组作为函数参数时,往往必须再用另一个参数来传入数组的大小

数组作为函数的参数时:

●不能在[]中给出数组的大小

●不能再利用sizeof来计算数组的元素个数!

二维数组

int a[3][5]

●通常理解为a是一个3行5列的矩阵

二维数组的遍历 

for(i=;i<;i++){
for(j=;j<;j++){
a[i][j]=i*j;
}
}

●a[a,j] 表示的是a[j]  (逗号表达式)

二维数组的初始化

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

●列数是必须给出的,行数可以由编译器来数

●每行一个{},逗号分隔

●最后的逗号可以存在,有古老的传统

●如果省略,表示补零

●也可以用定位(C99 ONLY)

初始C语言中的数组(男神翁凯老师MOOC)的更多相关文章

  1. 初识C语言中的函数(男神翁凯老师MOOC)

    什么是函数? 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值. 可以先想象成数学中的函数: y=f(x) 例如 求begin到end和的函数定义 void sum(int begi ...

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

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

  3. Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针)

    the-way-to-go_ZH_CN/07.1.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...

  4. Go语言中底层数组和切片的关系以及数组扩容规则

    Go语言中底层数组和切片的关系以及数组扩容规则 demo package main import ( "fmt" ) func main() { // 声明一个底层数组,长度为10 ...

  5. 初始C语言中的指针(翁凯男神MOOC)

      运算符  & ● scanf("%d",&i); ●获得变量的地址,它的操作数必须是变量 ● int i; printf("%x",& ...

  6. C语言中的数组和指针以及字符串

    数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 da ...

  7. Go语言中的数组与数组切片

    Go中的数组与C的数组一样,只是定义方法不同 c: int a[10][10] Go [10][10]int 定义并初始化 array1 := [5]int{1,2,3,4,5} 变量名 := [in ...

  8. C语言中动态分配数组

    如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老师说是不可以的.后来又问了一位教C++的老师,他告诉我在C++里用new可以做到,一直不用C++,所以也不明白.今天在逛 ...

  9. 【转】C语言中动态分配数组

    原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html 如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老 ...

随机推荐

  1. python中的sockeserver模块简单实用

    1. socketserver模块简介 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其它的模块是可以的,例如select模块,在这里见到的介绍下s ...

  2. python requests 发起http POST 请求

    python requests 发起http POST 请求,带参数,带请求头: #!/usr/bin/env python # -*- coding: utf-8 -*- import reques ...

  3. BZOJ2134 luoguP1297 [国家集训队]单选错位

    单选错位 [问题描述] gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,…,a ...

  4. 【Fiddler学习】Fiddler面板的详细介绍(转)

    转自:https://www.cnblogs.com/GreenLeaves/p/6971452.html 下面开始分析主界面的功能区: 1.Fiddler菜单栏,上图黑色部分,包括捕获http请求, ...

  5. 最简单的DHCP服务

    这几天在准备网络安装linux操作系统.最后决定用pxe + kickstart 的方式完成.原理.方案弄完了之后,开始搭建,结果被DHCP给挡住了.这不就得研究研究最简单最实用的DHCP使用方法. ...

  6. ROS-by-example的安装

    在这里我之前用的VM12安装成功之后,仿真器机器人会有问题,故把电脑做成双系统的形式来重新安装: 环境:Ubuntu14.04 LTS 32bits ROS版本:ROS Indigo 在学习本部分之后 ...

  7. CopyOnWriteList-JDK1.8

    CopyOnWrite,一个写时复制的技术来保证并发操作的安全,使用这种技术的前提是读大于写. 读读之间相容, 写写之间互斥, 读写操作相容. 实现方法: 在对底层数据进行写的时候,把底层数据复制一份 ...

  8. PHP读取txt文件到数组

    $file_path = "test.txt"; if(file_exists($file_path)){ $file_arr = file($file_path); for($i ...

  9. python中的isalnum、isalpha、istitle、isspace、islower、isupper、isdigit

    isalnum()判断是否包含字母或者数字 isalpha()判断是否都是字母 istitle()判断每个单词首字母是否是大写 isspace()判断是否是空格 islower()判断字母是否全都是小 ...

  10. mysql 外键引发的删除失败

    mysql> TRUNCATE TABLE role ; ERROR 1701 (42000): Cannot truncate a table referenced in a foreign ...