首页 > > > C_语言中指针的妙用.pdf

C_语言中指针的妙用.pdf

C_语言中指针的妙用.pdf

上传者: 孙海 2011-05-13 评分1 评论0 下载26 收藏10 阅读量670 暂无简介 简介 举报

简介:本文档为《C_语言中指针的妙用pdf》,可适用于IT书籍领域,主题内容包含语言中指针的妙用李芳菊蒋建郑州华信学院是当今最流行的一种面向对象的程序设计语言。指针是语言中的一个重要概念,也是中最难掌握的内容之一。指针是一种数据符等。

语言中指针的妙用 李芳菊 蒋建 郑州华信学院 是当今最流行的一种面向对象的 程序设计语言。 指针是 语言中的一个 重要概念 , 也是 中最难掌握的内容之 一。指针是一种数据类型 , 具有指针类型的 变量称为指针变量 , 指针变量存放其他变 量或对象的地址 , 它可以有效地表示数据 之间复杂的逻辑关系。 正确而灵活地运用 指针 , 可以带来许多方便 , 比如可以有效地 表示复杂的数据结构、 动态分配内存 、方便 地使用字符串、 在调用函数时能得到多干 个的值以及可以直接处理内存地址等等 。 ! 指针与函数 指针与函数的结合具有丰富的内涵 , 例如 , 指针可以作为函数的参数 , 也可作为 函数的返回值 , 指针可以指向函数成为函 数指针 , 函数指针也可以用数组的元素构 成函数指针数组等等。 指针作函数参数 , 实现的是传址调用 , 使用传址调用方式时 , 调用函数的实参用 地址值 , 被调用函数的形参用指针。调用是 系统将实参的地址值赋给对应的形参指针 , 使形参指针指向实参变量 。因此 , 它的实现 机制是让形参的指针直接指向实参。 那么 , 形参在函数体内的任何变化 , 都影响到调 用函数中与之相对应的实参的值。 例 指针做函数参数使用实例。 # % & ( &) +,&. / 01 2 ( &3 0 .%罗 4% , . , % , 5 67 2 ( &38 0. % 9 &:4%, ; . , % , ; 5 672 ( / .% 46 < % , 3 = > , ? = ! 7 8 , ) ) 3 二 ”) ) 3 ) ) Α , ” ) ) ’ ?= ”) ) ? ) ) &%( & 3 &0 .% 9 & 43 , ? 67 8 , ) ) ”Β = Χ ) ) 3 ) ) ” , “ ) ) ,? = ”) ) ? ) ) &% ( &38 0 .% 9 &:4Δ 3 , Δ ?678 , ) ) 3 二 ) )3 ) ) , , ) ) ?= ”) ) ? ) ) &% ( 7 Ε 2 ( &3 &0 .% 9 & 4% , . , % , 56 < % , Φ 7 Φ = . 7 . = 5 7 5 = Φ 7 8 ,4 ) ”.Γ,& &3 &0. %罗 43 , ?6” ) ) &% ( Ε 2 ( &38 0. % 9 &:4% , ; . , % , ; 56 < 一 %, Φ Η 一 Ι = ; Β , ; Β = ;? 7 ; ? = Ι , Ε 8 ,) ) ”. Γ,& &3 80.%罗ϑ4Δ3 ,Δ? 6”) ) &% ( 程序氛行结果女口下 Η 一 Β = , ?= ΑΚ 一 . 便Γ &Β Γ .Γ 9 & 气Β , ? 6一 3 一> , ?一 ! ! .Γ,& &3 80 .% 9 &:4Δ3 , Δ?6 一 3 = ! , ? = > 一 从程序的结果看, 函数 &3 80 .% 9& 使 一用的是传值调用 ,形参在函数体内的任何改 一变都不影响与之对应的实参的值 7 而在函 一 数&38 0.% 9 &:使用的是传址调用 , 形参在函一数体内的任何变化 , 都影响到与之对应的 一实参的值 , 形参. 和5做了一次交换 , 这种 一交换间接使得 3 和?做了交换。 可见 , 在指 < 针作函数参数的传址调用中, 通过改变形< 参所指向变量值来改变调用函数的实参值 , , 即从而达到函数之间的信息传递 。 一ϑ 指针与数姻 一 ϑ ! 通过指针访问数组元素 一 在 中, 数组的元素可以用下标来 一表示 , 也可用指针表示 , 但是在实际使用中 < 一般都使用指针表示 因为指针表示要比 ‘ 下标表示处理起来更快 。 中规定 , 数 一组名可以代表数组的首地址 , 也就是数组Ε 的第一个元素地址 。这样 , 就可以通过指向 Ε 数组的指针间接访问数组元素。 指针作为 一 一种特殊的变量 , 可参与关系运算、 赋值运 一算 , 也可通过算术运算对数组中某个或某 Ε 些指定元素进行快速操作。 < # % ( Κ (& ) ! Λ ,Γ &. / 0 1 Ε 2 !. / .% 气6 < 0. 、卜 ,ΜΝ ,, 一 8 0. ; Ο= + 7 < 8 , ) ) +) ) &% 山Ε 8 , ) ) 盯!! ) ) Π Θ! ) ) Π Ρ! ) ) &% ( Η 【 8 ,) ) ; Σ ) ) ; 4Σ ϑ 6) ) ; 4Σ Τ 6 ) ) ; 4Ο Υ 6 ) ) ; Ο Θ) ) &% ( 7 Ε 程序的运行结果如下 Η . 5& (&Γ9 城5( Γ . & 9 ! 该程序声明了字符数组+ , 并进行初始 化。使用语句8 , ) ) +) ) &%( 输出了数组 +中的元素, 在输出数组+中的某个元素时 可以直接使用下标来引用 , 也可用指针来 表示 。 如在程序中定义了一个指向数组名 为+的指针Σ , 因数组名可以代表数组的首 地址 , 所以Σ存放了数组 +的第一个元素地 址 , 当进行8 , ) ) ;Ο 操作时, 就输出了数 组+的第一个元素. , 另外指针还可进行算 术运算 , 所以 & ,) ) ; 4Σ ϑ6) ) ; 4Σ Τ 6 ) ) ;4Ο Υ6 依次输出了数组的第三个、第五个元素和第七个元素 , 即8 、 &和 Π 程序中 输出表达式 ;Σ ϑ的值为 ΠΠ , 因为;Ο 是字 符. , 它的ςΛ 8 码值是Π> , 所以 , 该表达 式值为ΠΠ , 实际上是字符 8 的ςΛ 码值 。 使用指针进行操作 , 方便快捷, 因此在使用 中一般使用指针来表示。 ϑ ϑ 数组指针作函数参数 数组名代表数组起始地址 , 用数组名 作参数传递的是地址 , 即将数组起始地址 传递给被调用函数的形参 , 既然地址可以 作为参数传递 , 那么指向数组的指针变量 当然也可以作为函数参数 。 例ϑ求二维数组中全部元素之和 # % ( ( & ) +, &. / 0 1 % , .ΩΩ. ( (4% , .试Ξ , % , % 6<% , , + / = 7 Γ 4= 7 ) % ! 6 + / = + / .试」7 & ,/ 4+ / 67 Ε 2 ( / . % 46 <% , . Ψ . ( (4% , .试!, %, % 67 Λ,. ,8 %, 斑ϑ!Τ Ξ= < , Θ , Ρ , > , Π , !! ,!Θ , !Ρ Ε7 % , ; Ο , , ,. 7 Ο= .【 ! ,回二. Ω .( (4Σ , Ζ67 8 , ) ) ”, ,. 卜 ”) ) , ,. 运行结果 Η , ,. = ΥΤ / .% 函数中Σ 为指向数组 . 的数组指 针 , 它的值为 .Α[Ξ , 即Δ .Ξ!Ξ , 指向. 数组 的第一元素 , 在调用函数 . &+ .(( 时 , 实参 为数组指针 Σ 值 4即数组元素. Ξ 的地 址 6, 传递给形参数组盯 , 这就使形参数 组. 的起始地址也是Δ. Ξ , 或者说 , 数 组 . 与数组 . 同占一段内存单元 , 在函数 .ΩΩ .(( 中将Ζ个元素的值相加。 / .% 函数中. 为二维数组 , 而 .ΩΩ . (( 函数中. 为 一ΡΖ一 一维数组 , 这是允许的 , 他们之间完全靠共 享内存单元而联系起来。 Θ 指针与类 在 中, 类 4( .岛6也是一种数据 类型 , 是程序员可以用声明语句说明的数 据类型。 类有比%, 、 %. ,等基本数据类型 更强大的功能 , 类是数据和函数的封装体。 类中的成员分为两种 Η 数据成员和成员函 数 , 数据成员是对类特征的描述 , 成员函数 实现对类中数据成员的操作 , 是类表现其 特征的渠道 。 在 中, 可以说明指向类的数据成 员和成员函数的指针 , 以实现类在 十编 程中的应用。 # % ( ( &) [Λ, &. / 01 .岛 ς 从而实现函数之间的信息传递 。 Τ ϑ 对象指针数组 所谓指针数组指的是数组元素为指针 的那类数组 , 对象指针数组是指该数组的 元素是指向对象的指针 , 它要求所有数组 元素都是指向同一个类类型的对象的指针。 它与一般的指针数组不同的是指向对象的 指针用做该数组的元素。 # % ( &) +,&. / 0 6 .岛 ς Σ 5 8 Η ς4% , . 6<3 = . 7 Ε %, Γ 飞4%, 56<况,]/ 3 ;& 5 7 Ε % , & , Σ 2 . ,& Η % , 3 7 Ε7 2 ( / . % 46 ς / 4Ρ67 % , ς Η Η ;详 7 Ο8 = Δς Η Η 8 , / ;详= ϑ % , 4ς Η Η ; Σ ΓΚ% 64% ,6 Σ几田= ςΗ ΗΓ% ,ς ;Ο= Δ/ 78 ,4 4 4Ο一6 ; Σ Γ如64Ζ64 4 &% ( , 飞 程序运行结果 Η !Ζ 该程序中, 定义了一个指向类的数据 成员的指针详和一个指向类的成员函数的 指针Σ ΓΚ% , 它们分别指向类ς 的数据成员 8和成员函数ΓΚ% 46, 程序中对指向类的成员 的这两个指针进行了引用和调用 , / ;详= ϑ 实际上是对详所指向的数据成员 8 赋值 ,等价于/ &= ϑ , 4Σ Φ& 1 ; Σ Γ]旧64Ζ6则通 过指向对象的指针 Σ 来调用指向类的成员 函数的指针 Σ Γ% , 等价于 Σ一1 Γ% 4Ζ6 , 函 数的实参为Ζ , 程序运行结果为 !Ζ , 因此通 过指向类的数据成员和成员函数的指针 , 巧妙地实现了类在 编程中的应用。 Τ 指针与对象 Τ ! 对象指针 一个对象一旦被创建 , 系统就给它分 配了一个存储空间 , 该存储空间的起点可 以像数据对象的地址一样 , 使用指针变量 操作。 对象初始化后 , 会占用内存空间, 可 以使用指针变量指向对象起始地址 , 称为 对象指针 。 使用对象指针作为函数参数要比使用 对象做函数参数更普遍一些 。首先 , 使用对 象指针做函数参数能实现传址调用 , 可在 被调用函数中改变调用函数的参数对象的 值 , 实现函数之间的信息传递 7 其次 , 使用 对象指针实参仅将对象的地址值传给形参, 而不进行副本的复制 , 这样可以提高运行 效率 , 减少时空开销。 # 加8 ( &) +, &. / 0 1 ( .阳 _ < Ο 5 Η _ 46<3 = ? = 7 Ε _4% , . , % , 56<3 = . ?= 5 Ε 2 ( 8 Σ ?4_ ; / 6 2 ( 货以?4%, . , % , 56<3 二. 7?= 5 7 Ε 2 ( Ο% ,46<& ,) ) 3 ) ) ’‘, ”) ) ? ) ) &% ( 7 Ε Σ 2. ,& Η % , Β , ? 7 Ε7 2 ( _ Η Η [Ο?4_ ; / 6 < Β = !!! 一1 Β ?= / 一1 ? Ε 2 ( % 4_ / , _ ;Α%ϑ 62 / . % 46 < _ Ο4 ϑ , Θ6, α 7 α 8 毋4ΔΣ6 Γ% 4Σ , Δα 6Ο Ο血,467α Σ% ,46 Ε 2 ( Γ% 4_ / , _ ;Α%ϑ 6< / 货饮?4Ρ , Υ67 Α%ϑ 一1 货饮?4Ζ , Π 67Ε 程序运行结果为 Η ϑ , Θ Ζ , Π 在该程序中, 有两个对象指针 , 一个 是 / 做成员函数 8 Ο? 46的参数 , 另一个是 /ϑ 做一般函数细 !46的参数。程序执行语句α 8 Ο?4ΔΟ 6,后 , 对象Σ 、 α 的的数据成员值均为 4ϑ , Θ6 , 在ΑΚ% 46函数中, 有两个形 参 , 一个是对象名, 另一个是指向对象的指 针名 , 当在被调用函数中, 改变对象的数据 成员值和指向对象指针的数据成员值以后 , 只有对象指针/ϑ 做参数所指向的对象 α 的成员值发生了改变 , 而另一个以对象做参 数 , 虽然形参对象/ 的值发生改变, 可实 参对象Σ的成员值不会发生改变。 因此程序 会出现上述输出结果 。 说明了对象指针做 函数参数时 , 实现的是传址调用 , 实参的值 随着被调函数中形参值的变化而发生改变 , Ο 5 & Η ς4%, 二 , %, 」= 6<. = ! 5 = 7 Ε2 ( Σ % ,467 Σ % 2 .,& Η % , . , 5 7 Ε‘ 2 ( ς Η Η Σ % ,46 < ,) ) . ) ) ” , ”) ) 5) ) &%山 Ε 2 ( / .% 46 < ς . 4> , Ζ6, . : , .Θ4Ρ , >6 ς ;5Α Θ!= !如Θ , Δ. ϑ , Δ. Ε Γ 城% , = !) Θ ! 6 议!!一1 Ο % ,46 Ε 程序运行结果为 Η Ρ , > , > , Ζ 该程序的/ . % 46函数中, 定义的5 是 一个一维指针数组 , 它有Θ个元素 , 每个元 素都是指向类 ς 对象的指针 , 由于. , .ϑ , .Θ 是三个被定义的ς类的对象, 并且被斌 了值 , 因此 , Δ. Θ , Δ. ϑ , Δ. !分别是三个对 象的地址值, 用它们给对象指针数组5的三 个元素赋值, 即5Α ! 、 5 Ξ 、 5Α ϑΞ 分别指向类 ς 中对象.Θ 、 .ϑ 、 . 。 程序最后通过Γ 循环语句将指针数组 5 的三个元素所指向的 对象值输出显示。 一Ρ, 一

该用户的其他资料

  • 名称/格式
  • 评分
  • 下载次数
  • 资料大小
  • 上传时间

用户评论

0/200
    暂无评论
上传我的资料

相关资料

资料评价:

/ 2
所需积分:1 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!