C语言的指针

摘 要:C语言作为计算机类专业一门重要的基础课程,是学生学习程序设计的开端,后续专业课程大多以此作为前提.而在C语言的学习中,指针又是一个重点以及难点.文章首先介绍了指针的概念以及指针变量的定义,其次重点介绍了指针与数组之间的关系,最后介绍了值传递以及地址传递的区别以及指针变量作为函数参数的应用.

关 键 词:C语言,指针,指针变量,地址传递

中图分类号:TP312文献标识码:A文章编号:16727800(2012)008004302

作者简介:卫五波(1981-),男,硕士,四川邮电职业技术学院助理讲师,研究方向为Web应用和网络通信;陈冬(1981-),男,硕士,四川邮电职业技术学院助理讲师,研究方向为移动游戏平台和中间件系统.

1指针与指针变量

1.1指针

C语言中,任何数据都会占用内存单元的.计算机内存的每个存储位置都对应唯一的存储地址,而变量名作为变量数据存储区域所取的名字,代表的是一个内存编号,而这个内存编号对于用户来说是未知的.如定义:inta等于12.

变量名a代表某个内存单元,而变量值12则是这块内存单元里面的内容.在整个程序运行过程中,通过变量名来访问变量,变量名a所代表的这块内存单元不变,所改变的只是这块内存单元里面的值.

C语言也支持使用变量存储地址来对变量进行存取操作,要取得变量的存储地址,可使用取地址运算符&,如&a表示变量a的存储地址;而变量的存储地址就是指针.

1.2指针变量

指针类型就是C语言中用于表示存储地址的数据类型,而专门用来存放变量存储地址的变量则称为指针变量.

格式:数据类型*指针变量名.跟普通变量不同的是,所有指针变量占用的内存单元大小是一样的,前面的数据类型代表的是指针变量所指向变量的数据类型.如以下代码:

inta,*b,//a是一个int型变量,b是一个指向int型数据的指针变量

b等于&a,//代表b指向a

下面代码是错误的:

floata,

int*b等于&a//此条语句有误,b只能指向int型变量

为了访问指针变量所指向变量的值,可以通过间接访问运算符*,如:

inta等于12,*b等于&a,

*b就代表取出b所指向变量a的值,也就是*b等于*(&a)等于a.

1.3二级指针变量

在C语言中,任何值都有所对应的内存地址,上述介绍的指针变量是指向普通变量的,也就是普通的指针,称为一级指针变量.

还有一种指针变量所指向的变量不是普通变量反而还是一个指针变量,这种变量称为二级指针变量.如:

inta等于12,//普通变量a

int*b等于&a,//一级指针变量b,指向普通变量a

int*c等于&b,//二级指针变量c,指向指针变量b

而这时,*c只是代表取c所指向的变量b里面的值:&a,而a的地址又是未知的.所以,对于二级指针变量c,要想取出a的值,必须需要两个间接访问运算符**,如**c等于**(&b)等于*b等于*(&a)等于a.

2指针与数组的关系

2.1指针与一维数组

数组元素在内存中是顺序存放的,并且数组名代表的是这一块内存单元的首地址,数组其他元素的地址可以根据每个元素所占用的内存单元依次推知.因此,一维数组的数组名实际上就是该数组的指针.如以下定义:


inta\[10\]等于{1,2,3,4,5},int*p等于a;

此时,p指向数组中的第1个元素(a\[0\]),p+1指向第2个元素(a\[1\]),依次类推.当然,p最开始也可以指向其他元素,如指向第4个元素:p等于&a\[3\],

在指针的运算中,经常会跟自增或自减运算符结合起来使用,如以下代码:

inta\[\]等于{20,21,22,23,24,25,26,27,28,29},

int*p,i,

p等于&a\[4\],//p初始指向第5个元素

printf("%d\n",*(++p)),/*由于自增运算符在前,所以p先指向a\[5\],之后输出为25*/

printf("%d\n",(*p)++),/*先输出p指向的内容25,之后再把指向的内存单元的内容加1,也就是a\[5\]的值变为26,p的指向不变/

printf("%d\n",*(--p)),/*先改变p的指向,指向a\[4\],之后输出a\[4\]的内容24*/

printf("%d\n",--(*p)),/*先把p所指向的a\[4\]的内容减1,变为23,之后输出23*/

for(i等于0,i<10,i++)

printf("%4d",a\[i\]),/*输出结果为20212223232626272829*/

printf("\n"),

上述代码就是指针与数组之间关系的一个典型示例,通过自增或自减运算符不光改变p的指向,也可以改变p所指向的内存单元里面的内容(也就是数组元素的内容).

2.2指针与二维数组

由于二维数组可以看成是多个一维数组,如以下定义:inta\[3\]\[4\],可以把二维数组a看成3个长度为4的一维数组a\[0\],a\[1\],a\[2\](假定二维数组按行存储);a\[0\]为第一个一维数组的数组名,里面有4个元素:a\[0\]\[0\],a\[0\]\[1\],a\[0\]\[2\],a\[0\]\[3\];a\[1\]和a\[2\]依次类推.此时,虽然二维数组名a和&a\[0\]\[0\]表示的是同一个地址,但是指向的却是完全不同的两种存储区域.a指向的是一维数组a\[0\]中4个元素的存储区域的首地址,&a\[0\]\[0\]指向第一个元素a\[0\]\[0\]的地址.此时的a相当于二级指针,a等价于&a\[0\],而a\[0\]又等价于&a\[0\]\[0\],所以**a才等价于a\[0\]\[0\],*a只是a\[0\],而a\[0\]还是地址,此值对于用户来说是未知的.如以下代码:

类似论文

C语言指针

指针简介指针是C语言的一个最重要的特征,它提供了一种统一的方法,使其能访问远程的数据结构 但对C语言初学者而言,。
更新日期:2024-10-26 浏览量:128826 点赞量:26845

大学非计算机专业C语言教学改革

摘 要C语言是高校非计算机专业学生学习计算机公共基础课程的一个不可缺少的内容,该课程教学效果的好坏直接。
更新日期:2024-11-16 浏览量:143653 点赞量:30974

基于C语言程序设计教学

摘 要C语言是工科类的一门计算机基础课,它重在向学生传授程序设计的原理、方法、操作等 通过本课程的学习,使学生能够掌。
更新日期:2024-9-18 浏览量:117787 点赞量:25268

C语言程序设计教学

摘 要:本文根据在C语言程序设计实际教学过程中的心得和学生的体会,对C语言的教学过程、教学资源、教学评价提出。
更新日期:2024-3-15 浏览量:42862 点赞量:9815

试议职专计算机课程C语言的教学

摘 要中职学校的计算机专业学生C语言的学习尤为重要,为拓展中职学生的就业渠道,C语言课程的学习必不可少 C程序设。
更新日期:2024-6-1 浏览量:14003 点赞量:4654

《C语言程序设计》教学改革

【摘 要】从C语言在教学体系中的地位及其特点出发,分析了传统教学方法的不足,对该课程的教学。
更新日期:2024-12-8 浏览量:21373 点赞量:5896

独立学院学生C语言编程能力培养

摘 要:本文针对独立学院学生C语言编程能力培养的问题进行了研究,以发挥学生的主动性、积极性为核心,从教。
更新日期:2024-2-22 浏览量:33737 点赞量:8646