您的位置:首页 > 编程语言 > C语言/C++

指针02 - 零基础入门学习C语言42

2011-01-25 22:20 543 查看

第八章:指针02

让编程改变世界

Change the world by program

对“&”和“*”运算符再做些说明

如果已执行了语句 pointer_1 = &a;

(1) &*pointer_1的含义是什么?

“&”和“*”两个运算符的优先级别相同,但按自右而左方向结合,因此先进行 *pointer_1的运算,它就是变量a,再执行 & 运算。

因此,&*pointer_1与 &a 相同,即变量 a 的地址。

如果有:
pointer_2 = &*pointer_1;

它的作用是将 &a (a的地址) 赋给 pointer_2 ,如果 pointer_2 原来指向 b ,经过重新赋值后它已不再指向 b 了,而指向了a。

请看图解!

[caption id="attachment_147" align="aligncenter" width="300"]

指针详解[/caption]

(2) *&a的含义是什么?

先进行&a运算,得a的地址,再进行*运算。即&a所指向的变量,也就是变量a。

*&a和*pointer_1的作用是一样的,它们都等价于变量a。即*&a与a等价。

(3) (*pointer_1)++ 相当于 a++。

注意括号是必要的,如果没有括号,就成为了*pointer_1++,从附录可知: ++和*为同一优先级别,而结合方向为自右而左,因此它相当于*(pointer_1++)。

由于++在pointer_1的右侧,是“后加”,因此先对pointer_1的原值进行*运算,得到a的值,然后使pointer_1的值改变,这样pointer_1不再指向a了。

源码分析

题目: 输入a和b两个整数,按先大后小的顺序输出a和b。

源程序: Example01.c(点击下载)

[caption id="attachment_148" align="aligncenter" width="300"]

输入a和b两个整数,按先大后小的顺序输出a和b[/caption]

指针变量作为函数参数

题目:对输入的两个整数按大小顺序输出!这次用函数实现交换功能!

程序源码:Example02.c(点击下载)

[caption id="attachment_149" align="aligncenter" width="300"]

对输入的两个整数按大小顺序输出[/caption]

实战演练

题目:输入a、b、c 3个整数,按大小顺序输出

程序思考:---->>>> 假定 a > b > c那么作几次对比?

程序源码:example03.c(点击下载)

数组与指针

一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。

指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。

所谓数组元素的指针就是数组元素的地址。

指向数组元素的指针

定义一个指向数组元素的指针变量的方法,与以前介绍的指向变量的指针变量相同。

例如:
int a[10]; // 定义a为包含10个整型数据的数组

int *p; // 定义p为指向整型变量的指针变量

应当注意,如果数组为int型,则指针变量的基类型亦应为int型。
p = &a[0]; // 把a[0]元素的地址赋给指针变量p

也就是使p指向a数组的第0号元素,见下图

[caption id="attachment_150" align="aligncenter" width="300"]

指向数组元素的指针[/caption]

通过指针引用数组元素

引用一个数组元素,可以用:

(1)下标法,如a[i]

(2)指针法,如*(p+i)

其中的a是数组名, p是指向数组元素的指针变量,其初值 p == a。

注意:数组名即翻译成数组的第一个元素的地址!

源码分析

输出数组中的全部元素

假设有一个a数组,整型,有10个元素。要输出各元素的值有三种方法:

(1) 下标法

(2) 通过数组名计算数组元素地址,找出元素的值。

(3) 用指针变量指向数组元素。

大家给分析分析,翻炒翻炒~

[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/LSSUHISCRFLT']视频下载[/Downlink]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: