C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)_第1页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)_第2页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)_第3页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)_第4页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

第8章地址和指针 8 1变量的地址和指针8 2指针变量的定义和指针变量的基类型8 3给指针变量赋值8 4对指针变量的操作8 5函数之间地址值的传递 考试的重点 8 1变量的地址和指针 计算机的内存是以字节为单位的一片连续的存储空间 每一个字节都有一个编号 这个编号就成为内存地址 内存空间 地址 10101011101210131014 10151016 120012011202120312041205 例如 shorta b floatx a 3 b 5 x 3 5 2002200320042005 a b x 3 5 3 5 每个变量的地址是指该变量所占存储单元的第一个字节的地址 在C语言中 我们可以定义整型变量 实型变量 字符变量 他们都是用来存放数据的 今天 我们来学习一下特殊的变量 这种变量只是用来存放内存地址的 比如我们定义了一个指针变量p p 占4个字节 该变量中只能存放内存地址 比如把变量a的地址赋予指针变量p 则指针变量p的值为1012 1012 请问 当访问变量a时 访问的是什么 当访问指针变量p时 访问的是什么 31012 当访问变量时 为 直接存取 直接访问 我们也可以通过指针变量间接的访问该地址中原来的值 此时称为 间接存取 间接访问 8 2指针变量的定义和指针变量的基类型 定义指针变量的一般形式如下 类型名 指针变量名 或类型名 指针变量名1 指针变量名2 例如 int pi int pj pa 1 pi pj pa都是变量 不过都是指针变量 定义时在普通变量名的左边加上星号就行了 说明 pi pj pa三个指针变量的类型为整型 说明三个变量中只能存放int类型变量的地址 这时我们称int是指针变量pi pj pa的基类型 如 double pd char s1 s2 pd的基类型为double类型 在指针变量pd中 只能存放double类型变量的地址 s1和s2的基类型为char类型 在指针变量s1和s2中 只能存放char类型变量的地址 8 3给指针变量赋值 8 3 1给指针变量赋地址值 例如 intk q p k为整型变量 q和p都是指针变量 q p k k 1 给普通变量赋值 整型变量k只被能赋予整型值 赋值时直接赋值就可以了 而指针变量只能被赋予地址值 如下是把整型变量k的地址赋值给指针变量q q 是用来求出变量的地址 1 k 知识点 由于把变量k的地址赋予了指针变量q q中现在存放的就是变量k的地址 这时可以说 q指向了变量k 指针变量之间也可以进行赋值 p q k 当我们输出变量k q p时 输出的结果为 112450521245052 8 3给指针变量赋值 8 3 2给指针变量赋 空 值 除了给指针变量赋地址值之外 还可以给指针变量赋一个特殊的值 该值为 空 值 int p p NULL int p p 0 int p p 0 注意 此时 指针变量p中不是没有值 而是有一个 空 值 8 4对指针变量的操作 8 4 1通过指针来引用一个存储单元 includemain intk q p k 1 q 112450521245052 输出时 变量k为1 而指针变量q和p则为变量k的地址 includemain intk q p k 1 q 1 k k q k p 111 访问时 在指针变量前在 间接访问运算符 则表示访问该地址中原来的值 8 4对指针变量的操作 8 4 1通过指针来引用一个存储单元 假定有以下定义和语句 int p i 10 j p 定义了三个变量 取变量i的地址赋给指针变量p 间接访问指针变量中的值10赋给变量j p 10 i j 10 j i 间接访问运算符 是一个单目运算符 必须出现在运算对象的左边 其运算对象可以是存放地址的指针变量 也可以是地址 j j 扩展知识 j p 1 10 j 11 j int p k 0 p p k p 100 100 0 k 100 p p 1 k k 1 101 p 1 或 p 或 p k 1 或 k 或k 若有以下定义和语句 int p s k 20 s p s 20 k 8 4对指针变量的操作 8 4 1通过指针来引用一个存储单元 程序举例 例8 1用指针指向两个变量 通过指针运算选出值最小的那个数 includemain inta b min pa pb pmin pa pa pb pmin a b min 输入的值依次放入pa pb所指存储单元中 scanf d d 比如输入 4132 41 32 a 41b 32 min a 41 if a b min b 32 min 32 8 4对指针变量的操作 8 4 2移动指针 8 4 3指针比较 所谓移动指针就是对指针变量加上或减去一个整数 或通过赋值运算 使指针变量指向相邻的存储单元 假定在内存中开辟了如图所示的五个连续的 存放int类型整数的存储单元 并分别给它们取代号为 a 0 a 1 a 2 a 3 a 4 这些代号所代表的存储单元中 分别有值为 11 22 33 44 55 a 0 a 1 a 2 a 3 a 4 1122334455 例如 int p q p p q p 2 q q q p q q q p 当有 inti j k i p j q k q p i j k 22442 指针比较 if p q printf ppointstolowermemorythanq n elseprintf qpointstolowermemorythanp n ppointstolowermemorythanq if p 0 printf ppointstoNULL N 8 5函数之间地址值的传递 8 5 1形参为指针变量时实参和形参之间的数据传递 例8 2程序举例 includeintmyadd int a int b intsum sum a b returnsum main intx y z printf Enterx y scanf d d x y z Enterx y 2441 24 41 调用 传递 a b sum sum x y 65 退出函数 将变量sum的值作为这个函数的返回值 返回到他的调用处 此时 该函数中的变量全部释放 65 65 24 41 65 8 5函数之间地址值的传递 8 5 2通过传递地址值在被调用函数中直接改变调用函数中的变量的值 例8 3调用swap函数 交换主函数中变量x和y中的数据 第七章例7 3的重写 includevoidswap int int main intx 30 y 20 printf 1 x dy d n x y swap 函数说明语句 x y 1 x 30y 20 调用 传递 a b t 2 a 30b 20 3 a 20b 30 退出该函数 返回到它的调用处 该函数无返回值 因为该函数为void类型 此时该函数中的变量全部释放 4 x 20y 30 t x x y y t 30 20 20 30 8 5函数之间地址值的传递 8 5 2通过传递地址值在被调用函数中直接改变调用函数中的变量的值 例8 4编写函数order int a int b 使调用函数中的第一个实参总是存放两个数中的较小的数 第二参数存放两个数中较大的数 includevoidswap int x1 int x2 intt t x1 x1 x2 x2 t voidorder int a int b if a b swap a b main intx y printf Enterx y scanf d d x y Enterx y 4124 41 24 x 41y 24 调用 a b 传递 if x y swap a b 调用并传递数据 x1 x2 t x x y y t 24 41 x 24y 41 8 5函数之间地址值的传递 8 5 3函数返回地址值 includeint fun int int main int p i j printf Entertwonumber scanf d d 函数说明 例8 5程序举例 p i j Entertwonumber 99101 99 101 传递 a b if i j returna 退出该函数 返回到它的调用处 该函数的返回值是一个地址 j的地址 所以该函数是一个指针类型 退出时该函数中的变量全部释放 i 99 j 101 p 101 习题 一 选择题8 1若有定义 intx pb 则正确的赋值表达式是Apb 程序的输出结果是A5 2 3B 5 12 7C 5 12 17D5 2 7 A B B 习题 8 4若有以下程序 includemain intk 2 m 4 n 6 pk 后 p的值是A20B30C21D318 6若指针p已正确定义并指向如图所示存储单元 则 p的值是A20B30C21D318 7若指针p已正确定义并指向如图所示存储单元 则 p的值是A20B30C21D31 a 0 a 1 a 2 a 3 a 4 1020304050 p C B B C 习题 8 8若有以下程序 includevoidprtv int x printf d n x main inta 25 prtv 程序的输出结果是A运行错误B100Ca的地址Db的地址 D B 习题 8 10若有以下程序 includevoidfun float a float b floatw a a a w a a b b w main floatx 2 0 y 3 0 px 程序的输出结果是A4 3B2 3C3 4D3 2 8 11若有以下程序 includevoidsub doublex double y double z y y 1 0 z z x main doublea 2 5 b 9 0

温馨提示

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

评论

0/150

提交评论