Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19127
  • 博文数量: 15
  • 博客积分: 560
  • 博客等级: 中士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 17:27
文章分类
文章存档

2011年(1)

2008年(14)

我的朋友
最近访客

分类: C/C++

2008-03-17 20:14:14

11.1 指针变量

程序中每个变量占用内存中的一个或多个字节,每个字节都有唯一的地址,地址虽然用数来表示,但是其取值范围可能不同于整数的范围,所以一定不能用普通整型变量存储地址.但是,可以用特殊的指针变量(pointer variable)存储地址.在用指针变量p存储变量i的地址时,我们说成p指向i.换句话说指针就是地址,而且指针变量是只存储地址的变量.

声明指针变量

int *p;

p是指向int型对象的指针变量.
c语言要求每个指针变量唯一指向特定类型(引用类型(referrnced type))的对象:
int *p
float *q
char *r
对于什么可以作为引用类型没有限制.(指针变量可以指向另一个指针,即指向指针的指针)

11.2 取地址运算符和间接寻址运算符

为了找到变量的地址,可以使用&(取地址)运算符.如果x是变量,那么&x就是x在内存中的地址.为了获得对指针所指向对象的访问,可以使用*(间接寻址)运算符.如果p是指针,那么*p表示p当前指向的对象.
int i,*p;
p = &i;  //把i变量的地址赋值给指针变量p

注意

不要把间接寻址运算符用于未初始化的指针变量.如果指针变量p没有初始化,那么*p的值是为定义的.给*p赋值甚至会更糟,p可以指向内存中的任何地方,所以赋值改变了某些未知的内存单元.

11.3指针赋值

c语言允许使用赋值运算符进行指针的复制,前提是两个指针具有相同的类型.

11.4 指针作为实际参数

调用函数时传递指向变量的指针,通过这种方法使得函数可以改变变量的值.
c语言用值进行参数传递,所以在函数调用中用变量作为实际参数会阻止对变量的改变.如果需要函数能够改变变量,那么c语言的这种特性可能很麻烦.
指针提供了此此问题的解决方法:不再传递变量x作为函数的实际参数,而是采用&x,即指向x的指针.声明相应形式参数p为指针.调用函数时,p将有&x值,因此*p将是x的别名.函数体内*p将是x的别名.函数体内*p的每次出现都将是对x的间接引用,而且允许函数既可以读取x也可以修改x.

一个用指针做函数实际参数的例子是scanf函数
scanf("%d",&i);

用const保护实际参数

当调用函数并且传递给他指向变量的指针时,通常会假设函数将修改变量. 可以用const声明函数不会改变传递给函数的指针所指向的对象.比如为了允许f检查传递的指针所指向的实际参数,而不是修改它,可以在声明中把const放置在形式参数的类型说明前:
void f(const int *p)
{
....
}

11.5 指针作为返回值

不仅可以为函数传递指针,还可以编写返回指针的函数.例如希望函数返回结果的内存位置而不是返回值.

阅读(429) | 评论(0) | 转发(0) |
0

上一篇:chp10 程序结构

下一篇:chp12 指针和数组

给主人留下些什么吧!~~