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

第八章:指针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]
原文地址:https://www.cnblogs.com/LoveFishC/p/3847003.html