现在的位置: 首页 > 综合 > 正文

C指针

2011年01月06日 ⁄ 综合 ⁄ 共 1563字 ⁄ 字号 评论关闭

一般把存储器中的一个字节称为一个内存单元, 不同的数据类型

所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元

为了正确地访问这些内存单元, 必须为每个内存单元编上号。 根

据一个内存单元的编号即可准确地找到该内存单元。内存单元的编

号也叫做地址。

既然根据内存单元的编号或地址就可以找到所需的内存单元,所以

通常也把这个地址称为指针。

内存单元的指针和内存单元的内容是两个不同的概念。 可以用一

个通俗的例子来说明它们之间的关系。我们到银行去存取款时,

银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在

存单上写入存款、取款的金额。在这里,帐号就是存单的指针,

存款数是存单的内容。

对于一个内存单元来说,单元的地址即为指针, 其中存放的数据

才是该单元的内容。

在C语言中, 允许用一个变量来存放指针,这种变量称为指针变

量。

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

针。

严格地说,一个指针是一个地址, 是一个常量。而一个指针变量

却可以被赋予不同的指针值,是变量

定义指针的目的是为了通过指针去访问内存单元

在一个指针变量中存放一个数组或一个函数的首地址有何意义呢?

因为数组或函数都是连续存放的。通过访问指针变量取得了数组或

函数的首地址, 也就找到了该数组或函数。

这样一来, 凡是出现数组,函数的地方都可以用一个指针变量来

表示, 只要该指针变量中赋予数组或函数的首地址即可。这样做

, 将会使程序的概念十分清楚,程序本身也精练,高效。

指针变量的类型说明
staic int *p2; /*p2是指向静态整型变量的指针变量*/
float *p3; /*p3是指向浮点变量的指针变量*/
char *p4; /*p4是指向字符变量的指针变量*/

指针变量的赋值
指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则

将引起错误. C语言中提供了地址运算符&来表示变量的地址。其

一般形式为: & 变量名; 如&a变示变量a的地址,&b表示变量b的

地址。 变量本身必须预先说明.
(1)指针变量初始化的方法 int a;
int *p=&a;
(2)赋值语句的方法 int a;
int *p;
p=&a;
不允许把一个数赋予指针变量,故下面的赋值是错误的: int

*p;p=1000;

被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错

误的

取地址运算符&,其功能是取变量的地址

取内容运算符*,用来表示指针变量所指的变量

把一个变量的地址赋予指向相同数据类型的指针变量。例如:
int a,*pa;
pa=&a; /*把整型变量a的地址赋予整型指针变量pa*/

把一个指针变量的值赋予指向相同类型变量的另一个指针变量。如


int a,*pa=&a,*pb;
pb=pa; /*把a的地址赋予指针变量pb*/
由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值。

把数组的首地址赋予指向数组的指针变量。
例如: int a[5],*pa;
pa=a;

(数组名表示数组的首地址,故可赋予指向数组的指针变量pa)
也可写为:
pa=&a[0]; /*数组第一个元素的地址也是整个数组的首地址,
也可赋予pa*/
当然也可采取初始化赋值的方法:
int a[5],*pa=a;

把字符串的首地址赋予指向字符类型的指针变量。例如: char

*pc;pc="c language";或用初始化赋值的方法写为: char *pc="C

Language"; 这里应说明的是并不是把整个字符串装入指针变量,

而是把存放该字符串的字符数组的首地址装入指针变量。

指针变量进行关系运算
main(){
int a=10,b=20,s,t,*pa,*pb;
pa=&a;
pb=&b;
s=*pa+*pb;
t=*pa**pb;
printf("a=%d/nb=%d/na+b=%d/na*b=%d/n",a,b,a+b,a*b);
printf("s=%d/nt=%d/n",s,t);
}

 

抱歉!评论已关闭.