c语言中 指针的研究,C语言中指针的研究与学习.docx

C语言中指针的研究与学习

[摘要]指针是C语言中广泛使用的一种数据类型。运

用指针编程是C

用指针编程是C语言最主要的风格之一,它是c

中的难点和

重点。文中在介绍指针的概念的基础上把指针不同的形式分 成两大类讲述,让学习指针的人更好的理解与记忆。

[关键词 ]指针 数组 地址 变量

中图分类t=r.号:

中图分类

t=r.

号:

TP3 文献标识码: A 文章编号: 1002- 6908

2007)1020069-01

凡是学习过 c 语言的都知道指针是 c 的灵魂 ,它极大的

丰富了 c 语言的功能。我不想重复很多数书上以及别人说得 很清楚的东西,我只是把我这几年来对 c 语言指针的学习心 得在这里总结一下。

指针是一个特殊的变量,它里面存储的数值被解释成为

内存里的一个地址。在学习指针时,很多人都会被它的灵活 形式给弄混淆,比如: (1)int p, (2)int *p[3], (3)int (*p)[3],(4)int(*p)(),(5)int *p() 等等。要理解不同的形式,我觉 得可以从两个方面来学习,这些形式可分为,指向某一对象 的指针以及值为指针类型两大类。在介绍这两种形式之前我 们先来搞清楚指针的概念。

可以用一个通俗的例子来说明指针的概念。我们到图书

馆找书时,首先根据图书馆的目录找到对应的书架号,找

馆找书时,

首先根据图书馆的目录找到对应的书架号,找

到书架后再找到我们要找的书。在这里,书架号就是一种地

址,我们也把它叫做指针,要找的书就是内容。在C语言中,

允许用一个变量来存放指针,这种变量称为指针变量。 因此,

允许用一个变量来存放指针,

这种变量称为指针变量。 因此,

个指针变量的值就是某个内存单元的地址或称为某内存 单元的指针。

指针变量同普通变量一样,使用之前不仅要定义说明,

而且必须赋予具体的值。指针变量的赋值只能赋予地址,决 不能赋予任何其它数据,否则会引起错误。c语言中提供了 地址运算符 & 来表示变量的地址。 其一般形式为: & -变量名; 如&a-变示变量a的地址。变量本身必须预先说明。设有指 向整型变量的指针变量 P,如要把整型变量 a的地址赋予P

可以用下面的方法:

int *p , a; p=&a;

接下来我们来理解前面我们所说的指针的两大类:

、指向某一对象的指针

通过多次学习指针我得出:要使指针变量指向某一对象

即将该对象的地址赋值给该指针变量,例如

1)int *P ,i; P=&i ;意思是指针变量指向整型变量 i

2

2)char *p ,a ; p=&a; 意思是指针变量指向字符型变量

3) int *p,a[10]; p=a; 意思是指针变量指向数组

以上几种便说明了刚刚说的结论。再有,如果想让一个

指针变量指向一个函数,也就是我们通常说的指向函数的指 针,同样的我们只要将该函数的访问地址告诉指针变量,那 么该指针变量就变成指向某一函数的指针。再例如,我们也 可以定义另外的一个指针,用来存储某一个指针的地址,也 就是指针的指针。下面我主要针对大家比较难把握的指向数 组的指针阐述一下(由于篇幅的原因我只介绍指向一维数组

的指针)。

正如我前面( 3)

正如我前面( 3)

中所定义指针变量

p 指向一维数组。

让我们通过下面的例子来看看数组和指针操作的等效性和 灵活度。

int *p,a[10]; p=a;

那么在引用数组的元素时我们可以这样来引用,a[0]

那么在引用数组的元素时我们可以这样来引用,

a[0]即

数组的第一个元素,还可以用 *p 和 *a 来表示 ,因为数组名有

个特殊的含义,代表数组的首地址,那么数组的下一个元 素 a [1]怎么表示呢,好多人都认为“给一个指针加一个整数,

就等同于给该指针的二进制数表示加上一个同样的整数” 其实,这是一个很容易犯的错误了, p+1 指向的是计算机内 存的下一个整数,而不是指向指向地址的下一个内存位置,

即表示a[1]的地址,那么*(p+1)就代表a[1],我们还可以用

(a+1)来表示a[1]。讲到这我们会发现数组名a和指针变量p

的功能很类似,很多初学 c 的人对于他们的区别总是容易出 错,数组名与指针变量有一个很本质的区别,请看下面的代 码:

10};Int i,*p,a[]={1 , 2, 3, 4, 5, 6, 7, 8, 9, p =a;

10};

for (i=0;i<=9;i++) printf ( “?”?;

p++ ; // 注意这里,指针值被修改

可以看出,这段代码也是将数组各元素值输出。不过,如果把{ }

可以看出,这段代码也是将数组各元素值输出。

不过,

如果把{ }中的P改成a我们会发现程序编译出错,

不能成功。

这就是指针 p 和数组名 a 的本质区别, p 是指针变量,而 只是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值