第2讲 C语言回顾ppt课件.ppt_第1页
第2讲 C语言回顾ppt课件.ppt_第2页
第2讲 C语言回顾ppt课件.ppt_第3页
第2讲 C语言回顾ppt课件.ppt_第4页
第2讲 C语言回顾ppt课件.ppt_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机软件技术基础 Lecture2ReviewC TheCProgrammingLanguage Appearedin1972DeveloperBellLabsDennisRitchie KenThompsonMajorimplementationsGCC MSVC BorlandC 在C语言诞生以前 系统软件主要是用汇编语言编写的 由于汇编语言程序依赖于计算机硬件 其可读性和可移植性都很差 但一般的高级语言又难以实现对计算机硬件的直接操作 这正是汇编语言的优势 于是人们盼望有一种兼有汇编语言和高级语言特性的新语言 语言是贝尔实验室的KenThompson和DennisRitchie在70年代初研制出来的 80年代初 美国国家标准化协会 ANSI 根据 语言问世以来各种版本对 语言的发展和扩充 制定了ANSIC标准 TuringAward In1983 RitchieandKenThompsonjointlyreceivedtheTuringAwardfortheirdevelopmentofgenericoperatingsystemstheoryandspecificallyfortheimplementationoftheUNIXoperatingsystem AlanTuring 1912 1954 NationalMedalofTechnology In1999 ThompsonandRitchiejointlyreceivedthe1998NationalMedalofTechnologyfromPresidentBillClintonforco inventingtheUNIXoperatingsystemandtheCprogramminglanguagewhichtogetherhaveledtoenormousadvancesincomputerhardware software andnetworkingsystemsandstimulatedgrowthofanentireindustry therebyenhancingAmericanleadershipintheInformationAge 你会用C语言写程序么 会C语法与会用C语言写程序是两个概念C的灵活性以及由此而产生的陷阱非常非常多Themostbeautifullanguageandmostdangerouslanguageintheprogrammingworld 小测验 用变量a给出下面的定义一个整型数一个指向整型数的指针一个指向指针的指针 它指向的指针是指向一个整型数一个有10个整型数的数组一个有10个指针的数组 该指针是指向整型数的 答案inta int a int a inta 10 int a 10 小测验 找出错误 voidmain int p p 10 typedefstruct intdata intindex FooData FooData foo intind FooDataelement element data ind 1 element index ind return C语言的特点 语言简洁 紧凑 使用方便 灵活 共有32个关键字 9种控制语句 运算符极其丰富 共有34种运算符 数据结构丰富 数据类型有整型 实型 字符型 数组 指针 结构体等 具有结构化的控制语句 如if else while switch for 允许直接访问物理地址 能进行位操作 可以直接操纵硬件 生成的目标代码质量高 程序执行效率高 C的关键字 C语言的关键字共有32个 根据关键字的作用可分为 数据类型关键字 12个 char double enum float int long short signed struct union unsigned void控制语句关键字 12个 break case continue default do else for goto if return switch while存储类型关键字 4个 auto extern register static其它关键字 4个 const sizeof typedef volatile C的语句 与其它高级语言一样 语言也是利用函数体中的可执行语句 向计算机系统发出操作命令 按照语句功能或构成的不同 可将 语言的语句分为五类 1 控制语句控制语句完成一定的控制功能 语言只有 条控制语句 又可细分为三种 1 选择结构控制语句 if else switch 2 循环结构控制语句 do while for while break continue 3 其它控制语句 goto return 2 函数调用语句函数调用语句由一次函数调用加一个分号 语句结束标志 构成 例如 printf ThisisaCfunctionstatement 3 表达式语句表达式语句由表达式后加一个分号构成 最典型的表达式语句是赋值语句 例如 num 5 就是一个赋值语句 语言程序的总体结构 一个完整的 语言程序 是由一个main 函数 又称主函数 和若干个其它函数结合而成的 或仅由一个main 函数构成 例 仅由main 函数构成的 语言程序 C语言的数据类型 1 基本类型字符型char整型int浮点型float双精度型double无值类型void2 导出类型 指针 数组 结构 联合 枚举 自定义类型 数组 数组 相同类型变量的集合 共用一个名字 用下标区别 按照下标递增在内存中连续存放 数组元素 数组中的变量 每个元素都属于同一类型 由数组名和下标唯一标识 一维数组的定义 格式 类型说明符数组名 常量表达式 举例 inta 10 定义一个数组 数组名a 有10个元素 每个元素的类型均为int 数组长度 注意 1 数组名后是方括号 而非圆括号 从a 0 开始 没有a 10 一维数组的定义 数组名遵循标识符的命名规则 注意使用 数据类型可以是任何类型 如int float char表示数组长度的常量表达式中不能是变量 只可以是常量和符号常量 定义后不允许改变 C语言不允许动态数组 正确的定义方式intb 2 3 intc 10 错误的定义方式intx 10 a x inta 10 inta 1 0 一维数组元素的引用 数组元素必须先定义 后使用不能一次使用整个数组 只能使用元素 使用数组元素与使用一般变量方法完全相同 形式 数组名 下标 例如inta 10 10个变量 a 0 a 1 a 9 scanf d 下标不要越界 不能使用a 10 一维数组的初始化 1 对全部数组元素赋初始值inta 5 1 2 3 4 5 a 1 2 3 4 5 a 0 a 1 a 2 a 3 a 4 2 对部分数组元素赋初始值inta 5 1 2 3 3 可以省略数组长度 系统自动计算 inta 1 2 3 4 5 长度就是5 a 1 2 3 0 0 a 0 a 1 a 2 a 3 a 4 一维数组的应用举例 例 建立一个存放10个数据的数组 数组元素值为数组元素下标的10倍 然后按正序和逆序输出 a a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 一维数组的应用举例 变量i既做数组下标 又做循环变量 通过循环 逐个处理数组元素 inta 10 i 对于i从0到9循环a i 10 i 对于i从0到9循环printf d a i 对于i从9到0循环printf d a i voidmain inta 10 i for i 0 i 0 i 逆序输出 printf 5d a i 数组应用常见错误 随机访问 count i i 0 1 length 1count 0 7 count i 1 count i 2 count 2 错误 数组相互赋值inta 5 4 3 2 1 定义数组aintb 5 a 错误 把数组a赋值给数组b错误 用数组类型作为函数的参数或返回值用全局数组或指针替代 数组应用常见错误 错误 下标越界 小于0或大于length 1 运行时出严重错误 不易发现原因for i 0 i0 二维数组的定义 定义方式 类型名数组名 行长度 列长度 例如 inta 2 3 inta 3 4 floatb 5 2 intc 2 3 4 inta 3 4 二维数组的定义 存储方式 按行存储inta 2 3 0 1 2 0 1 a 0 1 a 1 0 a 1 1 a 1 2 a 0 0 a 0 2 a 0 a 1 a 0 a 1 每个元素a i 又是一个包含3个元素的一维数组 a由2个元素组成a 0 a 1 是行名 每行首地址 二维数组的引用 先定义后使用若有inta 3 5 则a 0 2 表示引用二维数组中第0行第2列元素下标可以是整型常量或整型表达式stu 2 1 2 不要超下标引用inta 3 5 引用a 3 5 是错误的 二维数组的初始化 全部元素赋值1 分行赋值inta 2 3 1 2 3 4 5 6 2 按元素顺序赋值inta 2 3 1 2 3 4 5 6 3 允许省略第一维长度inta 3 1 2 3 4 5 6 第一维长度为2 123456 123456 123456 二维数组的初始化 1234 1234 1234 部分元素赋值1 分行赋值inta 2 3 1 2 3 4 2 按元素存储顺序赋值inta 2 3 1 2 3 4 3 允许省略第一维长度inta 3 1 2 3 4 第一维长度为2 字符 字符数组和字符串 字符和字符串理解字符串与字符数组的概念区分字符串常量与字符串掌握字符串的输入 输出处理能够使用字符串处理函数 字符型数据 C程序设计语言采用了ASCII标准字符集来提供对字符数据的支持 ASCII字符集提供了127个字符的编码 在计算内部实际上是将字符以整数形式存放在内存单元中的 这个整数实际上就是字符的ASCII编码C语言中字符常量是由1个字符构成的数据 在程序中 字符常量必须用单引起括起来 所以 1 和1是两个完全不同的对象 前者是字符 后者是一个数字 字符变量 字符变量是用类型符char定义的变量 一个字符变量只能存储一个ASCII字符 例如 charc 正确的代码 c 错误的代码 c c abc 字符串常量 由多个字符组成的数据称为字符串常量 以后简称字符串 字符串常量的两边必须用双引号包含起来例如 thisisastring 或 china 字符串常量 字符串在内存中存放时 系统将自动在字符串的末尾添加一个字符串的结束标记 0 空字符 碰到第一个 0 就认为字符串处理结束 语言中没有专门的字符串变量 通常是用字符数组来存放字符串 一个一维字符数组可存放一个字符串一个二维字符数组则可看成多个一维字符数组的组合 即每行可存放一个字符串 字符数组 字符数组使用char关键字进行定义 一般形式如下char数组名 数组长度 字符数组初始化 逐个字符赋值 例 charch 3 B o y 所占空间为3 用字符串常量赋值 例 charch 3 Boy 所占空间为4 也可写成charch 3 Boy 字符数组 用字符串常量初始化字符数组会自动加结束符 0 用字符常量初始化字符数组则不会 如 charc Hello s H e l l o 0 进行字符串处理时 就可以通过检测 0 来判定字符串是否结束字符串长度指的是字符串本身字符的个数 并不把字符串结束符 0 计算在内 判断下列赋值是否等价 charstr china charstr c h i n a 0 charstr china charstr c h i n a charstr 10 china charstr 10 c h i n a 判断下列赋值是否等价 charstr china 数组str的长度为6 字符串 china 的长度为5 指针 1 地址的概念计算机的主存储器被划分成一个个存储单元 为了区分各存储单元 要为每个存储单元编号 这个编号即地址 指针 2 地址与变量 inti 10 floatk 20 00 内存中每个字节有一个编号 地址 i 变量是对程序中数据存储空间的抽象 10 20 00 k 指针 指针 是用来存储和指向内存地址的一种数据类型 和其他的数据类型一样 指针也有指针变量和指针常量 inta 2 int p q 0 x80004000访问内存和操作地址动态内存分配函数传地址调用配合结构体构造复杂数据结构 0 x80004014 q0 x800040140 x80004000 p0 x800040140 x80004004 a2 0 x80004008 0 x8000400c 0 x80004010 指针 定义 类型标识符 变量名 int p 声明指向int型的指针变量p p表示变量名是p 表示这个变量时指针型 int表示指向的内容是整形 指针 定义 类型标识符 变量名 例char ch 定义了指针ch 指向字符型变量int r 定义了指针r 指向整型变量float fp 定义了指针fp 指向单精度浮点型变量int p 10 定义了指针p 是指向数组的指针 数组内有10个元素 每个元素是整型的int p 10 定义了数组p 数组内有10个元素 每个元素是指向整型变量的指针int fp 定义了指针fp 指向一个指向整型变量的指针 指针 指针的基本运算 取操作对象 内存单元 的地址 取指针对象的内容 动态存储单元的引用 随机3随机 PIj 200020022004 20023 PIj 200020022004 200233 PIj int p I 3 j p 200020022004 指针的算术运算 指针算术运算的结果依赖于指针的基类型p i指向地址p i d i为整型数 d为p指向的变量所占字节数 p p p i p i p i p i等若p1与p2指向同一数组 p1 p2 两指针间元素个数 p1 p2 dp1 p2无意义 数组与指针 数组名是数组首元素的地址 可以这样说 数组名就是指向数组首元素的指针 语言提供了两种访问数组元素的方法 一是指针运算 二是数组下标运算 利用指针运算可以较方便的操作数组 但其中有许多细节必须清楚才能避免错误 数组与指针 例如 inta 10 p p 这样p为指向数组元素的指针p i和a i是地址 就是a i 的地址即 a i p i 和 a i 就是p i或a i所指向的数组元素a i a i 和 p i 等价 数组与指针 只有指向数组的指针变量可以进行加减运算 指向其他类型的指针变量作加减运算无意义 通过指针移动间接访问数组元素 如 p 的效率比直接使用数组元素的效率高数组名是常量 不能对数组名进行赋值或自增自减运算 如 a a a i 在逻辑上都是错误的 要注意 和 连用时的结合性 数组与指针 要注意 和 连用时的结合性 p 或p 1 使p指向下一元素 注意越界 p 等价于 p 先取出p指针变量所指向的单元内容 即 p 然后再使p 1 p p等价于 p 先使p 1 p 然后再取出p指针变量所指向的单元内容 p 与 p 不同 前者表达式值为a 0 后者值为a 1 p 表示将p所指向的单元内容值加1 指针与字符数组 用双引号括起来的一串字符 如 hello 称为字符串常量 字符串常量的指针是它的首字符 h就是 hello 的首地址 一个字符串可用下面两种方法表示 用字符数组存放一个字符串charch 6 hello 用字符指针变量指向一个字符串char pstr hello 字符指针变量与字符数组的区别 charstr Thisisastring 这是对字符数组的定义及初始化 系统先分配一块长度为字符串字符长度 1的连续的内存空间以存储字符串 Thisisastring 字符数组名str就是连续内存空间的首地址 字符数组str占用字符串长度 1个字节 并存储字符串的全部字节 字符指针变量与字符数组的区别 char str Thisisastring 这是对字符指针变量的定义及初始化 系统先分配一块长度为字符串字符个数加上1的连续的内存空间以存储字符串常量 Thisisastring 然后将连续内存空间的首地址赋给字符指针str 字符指针变量str只占用2字节 并没有存储字符串的全部字节 字符指针变量与字符数组的区别 区别以下语句char str Thisisastring 等价于char str str Thisisastring charstr 20 str Thisisastring charstr Thisisastring 均合法 不合法 合法 字符指针变量与字符数组的区别 若定义的是字符数组 在编译时就为它分配内存单元 其首地址是确定的 而定义字符指针变量时 字符指针变量本身的地址是确定的 但其存放的地址值是随机的 charstr2 10 scanf s str2 char str1 scanf s str1 char str1 str2 10 str1 str2 scanf s str1 字符指针变量与字符数组的区别 字符数组名虽然代表地址 但它的值是不能改变的 而字符指针变量的值是可以改变的 char str1 IloveChina str1 str1 7 printf s str1 charstr2 IloveChina str2 str2 7 printf s str2 字符指针变量与字符数组的区别 字符数组名虽然代表地址 但它的值是不能改变的 而字符指针变量的值是可以改变的 char str1 IloveChina str2 str2 str1 Str2 1 Z charstr2 IloveChina str2 str2 1 str2 1 Z 指针应用注意事宜 通配指针 void void p 表示指针指向的内容没有类型限制可以与任何类型的指针互相赋值根据需要转成相关数据类型的指针空指针 NULL 一个预先定义好的 void 类型指针常量表示一个指针没有指向任何东西可以与任何类型指针进行比较操作可以与0进行比较操作不能进行 操作 指针应用注意事宜 错误 访问空指针int p NULL p 或是p 运行时出段错误良好编码习惯 检查指针是否为空if p 等效于p NULL p 对于指针为空的情况 进行异常处理if p 等效于NULL p或p NULLprintf nullpointer 指针为空良好编码习惯 比较NULL p与p NULL防止手误写成NULL p 错误 访问或释放野指针 结果不可预测当一个指针指向的内容非法时 这个指针就是野指针定义一个指针没有赋初值勤 这时候指针就是野指针当一个指针指向的内容被销毁后 这个指针就成为野指针良好编码习惯 定义时初始化 无值赋空值 不留野指针 voidfunction int p NULL 良好编码习惯 释放完内存后 指针置空销毁一个指针指向的内容后 把这个指针置空 NULL free p p NULL 指针应用注意事宜 指针数组 数组的元素类型是指针类型int ptrs 10 ptrs是一个数组 元素类型是指针 共10个指针 int 表示数组元素的类型是指向整数的指针 数组名称是ptrs 数组长度是10 指针数组 指向数组的指针 int array 10 array是一个指针 指向长度为10的整形数组 array 必须加括号 括号 运算符优先级高于 指向的数组长度是10 表示array是指针类型的变量 int表示指向的数组元素类型 指向数组的指针 指向指针的指针 一种特殊的指针 指向的变量类型是指针inta 2 int p q是指向p的指针 p a 2 q p a 指向指针的指针 指向指针的指针 voidfunc chararray 14 等价于voidfunc char parray parray指向数组的第一个元素voidfunc char array 14 等价于voidfunc char parray parray是一个指向指针的指针 指向数组的第一个元素 指向函数的指针 int pfunc inta intb 声明一个函数指针变量pfunc int func inta intb 声明一个函数 函数返回值类型是一个指向int变量的指针 表示这是一个指针 指针变量名字是pfunc 指向的函数返回值是int类型 指向的函数有两个int类型参数 指向函数的指针 pfunc是指向hello的函数指针 通过 func 调用 一个函数是若干语句的集合 经编译后存储在函数代码存储区 并占有一片连续的存储空间 对函数指针只能用函数名赋值而无其他运算 指向函数的指针 回调函数传递给调用者 让调用者回调传递事件处理函数给事件接收者线程结束时用回调函数释放资源泛型编程与面向对象思想intlower structstudents1 structstudents2 inthigher structstudents1 structstudents2 voidfind structstudent array intlength int compare structstudents1 structstudents2 compare是一个比较策略比较策略易变 而比较算法不易变 结构体 结构体将不同类型的数据组合成一个整体用来表示简单类型无法描述的复杂对象可以用结构体来定义用户自己的数据结构举例描述学生信息 结构体 结构体类型的声明 struct 结构体名 成员表列 成员表列 形式类型成员名 类型成员名 结构体 结构体类型声明的说明 1 声明了一种类型 而不是定义变量结构体名可以没有 但是这样就无法再次使用该结构体类型了成员表列中是成员 Member 的定义成员的定义形式与变量定义相同成员类型可以是另一结构体类型 但不可直接或间接递归嵌套成员表列不可为空 至少要有一个成员 结构体 结构体类型声明的说明 2 同一结构体的成员不能重名不同结构体的成员可以重名结构体成员和其他变量可以重名结构体类型与其成员或其他变量可重名structtest inttest test 结构体类型名称是struct结构体名 注意struct关键字不能省略 结构体 结构体类型声明的说明 3 即使两个结构体声明中的成员类型 名称 顺序都完全一致 它们也是不同的类型结构体类型也要 先声明 后使用 如果结构体类型声明在函数内部 则该函数之外无法引用此结构体类型一般把结构体类型声明放到文件最前面也可以把结构体类型声明放在头文件里 结构体 结构体类型声明举例 structstudent unsignednum 学号 charname 20 姓名 charsex 性别 unsignedage 年龄 floatscore 分数 charaddr 50 地址 结构体 结构体变量的定义有三种形式 1 先构造结构体类型 后定义具有这种结构的变量 2 构造结构体类型的同时 定义具有这种结构的变量 3 利用无名结构体类型定义变量 结构体 结构体变量的定义 1 structstudent unsignednum charname 20 charsex unsignedage floatscore charaddr 50 structstudentstu1 stu2 先构造结构体类型 后定义具有这种结构的变量 结构体 结构体变量的定义 2 构造结构体类型的同时 定义具有这种结构的变量 structstudent unsignednum charname 20 charsex unsignedage floatscore charaddr 50 stu1 stu2 结构体 结构体变量的定义 3 利用无名结构体类型定义变量 struct unsignednum charname 20 charsex unsignedage floatscore charaddr 50 stu1 stu2 typedef的用法 类型定义关键字 用于在原有数据类型 包括基本类型 构造类型和指针等 的基础上 由用户自定义新的类型名称 主要由以下用法 用途一 定义一种类型的别名 而不只是简单的宏替换 可以用作同时声明指针型的多个对象 比如 char pa pb 它只声明了一个指向字符变量的指针 和一个字符变量 这多数不符合我们的意图 typedefchar PCHAR PCHARpa pb 定义了两个指向字符变量的指针 避免了错误 typedef的用法 用途二 用typedef来定义与平台无关的类型 比如定义一个叫REAL的浮点类型 在目标平台一上 让它表示最高精度的类型为 typedeflongdoubleREAL 在不支持longdouble的平台二上 改为 typedefdoubleREAL 在连double都不支持的平台三上 改为 typedeffloatREAL 也就是说 当跨平台时 只要改下typedef本身就行 不用对其他源码做任何修改 typedef的用法 用途三 用typedef来简化struct定义 structtagPOINT1 intx inty structtagPOINT1p1 typedefstructtagPOINT intx inty POINT POINTp1 这样就比原来的方式少写了一个struct 比较省事 尤其在大量使用的时候 结构体变量中成员的引用 对结构体变量的使用是通过对其成员的引用来实现的 引用结构体成员的一般形式如下 结构变量名 成员名 规则 不能将一个结构体变量作为一个整体进行赋值和输出 只能对其各个成员分别输出printf student1 printf d student1 num 结构体变量中成员的引用 2 若成员本身又属一个结构体类型 只能对最低级的成员进行赋值或存取以及运算 如 student1 birthday year 3 对成员变量可以象普通变量一样进行各种运算 如sumage student1 age student2 age 指向结构体的指针 定义形式 struct结构类型名 指针变量名举例structstudentstu p p 指向结构体的指针 用指针变量可间接访问它所指向的结构体类型变量的各个成员格式 指针变量名 成员名例 p age 18 指针变量名 成员名例 p age 18结构体变量访问成员 stud1 age 指向结构体的指针 structstudent p NULL p是指针 指向structstudent类型变量structclass char name 班级名称 intcount 学生数 指针作为结构体成员structclass char name intcount student p 指向学生结构体类型变量的指针作为成员 指向结构体的指针 自引用结构 成员是指向同类型变量的指针structclass char name 班名字 intcount 学生数 structclass node 下一个班级 structclass类型的成员node 指向一个structnode类型变量 指向结构体的指针 三个structclass类型变量cs1 cs2 cs3 组成一个链状cs1 next cs1 30 next cs2 28 next cs3 28 next NULL 动态分配内存 局部的自动变量在栈上分配 函数返回后变量销毁在堆上动态的分配内存 整个进程都可见 在手动释放之前一直存在程序根据需要向操作系统申请一块内存必须在代码里面显式的释放 否则造成内存泄露 动态分配内存 void malloc size tsize 头文件stdlib hsize指定分配内在的大小 以字节为单位返回指向所分配内存的指针分配失败 返回NULL 系统已无可用内存分配成功后 转成我们希望使用的类型void ptr malloc sizeof int int num int ptr 分配4个字节 并把分配的内存当作int使用 动态分配内存 voidfree void ptr stdlib h释放先前动态分配的内存应用程序结束前用free把申请的内存还给系统free ptr 函数参数传递 voidExchg1 intx inty inttmp tmp x x y y tmp printf x d y d n x y main inta 4 b 6 Exchg1 a b printf a d b d n a b return 0 输出的结果为 x y a b 函数参数传递 值传递 原来 其实函数在调用时是隐含地把实参a b的值分别赋值给了x y 之后在你写的Exchg1函数体内再也没有对a b进行任何的操作了 交换的只是x y变量 并不是a b 因此a b的值没有改变 函数只是把a b的值通过赋值传递给了x y 函数里头操作的只是x y的值并不是a b的值 这就是所谓的参数的值传递了 函数参数传递 voidExchg3 int 输出的结果为 x y a b 函数参数传递 引用传递 Exchg3函数的定义处Exchg3 int x y前都有一个取地址符号 有了这个 调用Exchg3时函数会将a b分别代替了x y了 我们称 x y分别引用了a b变量 这样函数里头操作的其实就是实参a b本身了 也就是说函数里是可以直接修改到a b的值了 函数参数传递 值传递和引用传递 在函数定义格式上有不同 值传递在定义处是 Exchg1 intx inty 引用传递在这义处是 Exchg3 int功能上是不同的 值传递的函数里操作的不是a b变量本身 只是将a b值赋给了x y 函数里操作的只是x y变量而不是a b 显示a b的值不会被Exchg1函数所修改 引用传递Exchg3 a b 函数里是用a b分别代替了x y 函数里操作的就是a b变量的本身 因此a b的值可在函数里被修改的 函数参数传递 voidExchg2 int px int py inttmp px px py py tmp printf px d py d n px py main inta 4 intb 6 Exchg2 输出的结果为为 px py a b 函数参数传递 地址传递 将a b的地址值传递给了px py 而不是传递的a b的内容 对 px py的操作当然也就是对a b变量本身的操作了 所以函数里头的交换就是对a b值的交换了 这就是所谓的地址传递 传递a b的地址给了px py 函数参数传递 一维数组 数组元素做为函数参数数组元素就是下标变量 它与普通变量并无区别 因此它作为函数实参使用与普通变量是完全相同的 如果是单个数组元素作为函数参数 那前面所讲的三种参数传递方式均可 main inta 5 i printf input5umbers n for i 0 i 5 i scanf d voidnzp intv if v 0 printf d v elseprintf d 0 函数参数传递 一维数组 数组名做为函数参数 数组名做为函数参数时 并不是将整个数组的元素都传递给子函数 仅仅是将数组的首地址传递 由于传递的是数组的首地址 因此在子函数中对数组元素的修改 在子函数返回后依然有效 但不能将此理解为是数组元素的双向传递 函数参数传递 一维数组 数组名做为函数参数 main intb 5 i printf initialarrayb n for i 0 i 5 i b i i nzp b for i 0 i 5 i printf d b i voidnzp inta 5 inti for i 0 i 5 i a i a i 1 函数参数传递 一维数组 数组名做为函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论