指针变量的定义和引用

目录

引入

一、指针变量的定义

二、指针变量的赋值

三、指针变量的引用

 总结


引入

C语言中可以通过变量名来引用变量的内存单元值。

例如,下面定义了两个变量。

int a, b;
那么a=2;表示将a的内存单元赋值成2,而b=a;则表示将a的内存单元的值复制到 b的内存单元中。
通过变量名来引用变量的内存单元值的方法被称为直接引用

而通过内存地址引用内存单元值的方法称为间接引用

如果将内存比喻成教学楼,内存单元对应教学楼的教室,假设张明老师在 9202 教室上课。这时,有人找张明老师,有两种叫法,一种是直接叫张明老师的名字,另一种是可以叫成“9202 教室的老师”。直接叫张明老师,可以认为是直接引用,“9202 教室的老师”则是间接引用。

一、指针变量的定义

指针变量的定义格式为:

【储存类型】    数据类型符   *变量名;

定义格式说明如下:
1)存储类型是指指针变量本身身的存储类型。
2)数据类型符可以是任何一和中有效的数据类型标识符,是指针变量所指向的内存单元的数据类型。
3)   *   号表明后面的变量是指销针变量。变量名必须是合法的标识行符。
例如

//单个指针变量的定义
int *p1;//表示p1是一个指针变量,他的值是某个整型变量的地址。或者说p1指向一个整型变量的地址。
float *p3,a;
或
float a,*p3;
//定义了一个指向浮点型变量的指针变量p3和浮点型变量a。
int *p4,*p5,*p6;
//同时定义三个指向整型的三个指针

二、指针变量的赋值

指针变量同普通变量一样,使用之前不仅要定义说明目,而且必须赋予具体的值。

未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。

指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。

在C语言中,变量的地址是由编译系统分配的,但用户并不知道变量的具体地址。

C语言中提供了地址运算符 &来表示变量的地址。

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

变量本身必须预先说明。

设有指向整型变量的指针变量p,如要把整整型变量a的地址赋予p,可以有以下两种方式。

int a;
int *p=&a;//指针变量初始化



int a;
int *p;
p=&a;//赋值语句的方法

int a=20;
int *p,*q;
p=&a;
q=p;//其作用就是先定义一个整型变量指针a和指针p然后把a的地址赋给指针p,然后再把p所指示的地址付给q。

应该注意的是,原则上一个指针变量只能指向同类型的变量,如上面的指针变量p和q只能指向整型变量,不能时而指向一个整型变量,时而指向一个字符型变量。当然,如果给指赋值时,一号右边的指针类型与左边的指针类型不同,则需要进行强制类型转换。例如
 

int a;

int *pi;

char *pc;
pi=&a; //pi 指向 a 
pc=(char *)pi; //pc也指向了a,即pi和pc 的值都是a的地址 
虽然pi和pc都指向了变量a,但它们引用变量a所对应的内存单元的值时是不相同的,通过pc只能访问a的字节单元,而pi则可访问a的整个内存单元。

三、指针变量的引用

"当一个指针指向一个变量时,程序就可以利用这个指针间接引用这个变量。间接引用
的格式是:
*指针变量。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型,而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。例如

int a;
int *p=&a; //p 指向 a 
*p=10; //相当于 a=10; 
//上面的程序中,由于定义的指针p指向了整型变量a,这时*p就是a,而p是a的地址。*p是变量a的间接引用。


又如,下面的程序:

int a,*p; p=&a;*p=10; a十+;
printf("a=%d,*p=%d",a,*p);
输出是:
a=11,*p=11


程序中*是间接引用运算符,是单目运算符,优先级与++、-的优先级相同,具有右结合性。与a++等价的表达式是(*p)++,而不是*p++。因为*p++相当于*(p++),其中的++是作用于p的,而不是作用于*p。

 总结

1):指针变量的定义和引用的重点强调
 2)指针变量必须先定义,后赋值,最后才能使用!没有赋值的指针变量是没有任何意
       义的,也绝对是不允许使用的。
3)指针变量原则上只能指向定义时所规定类型的变量。
4) 指针变量也是变量,在内存中也要占用一定的内在存单元,但所有类型的指针变量都
占用同样大小的内存单元,如在 VC和CB下均为14字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值