C语言 怎样定义指针变量

定义指针变量的一般形式为:
类型名*指针变量名;
如:int*p1,*p2;
左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
例如,int*p1,*p2;,定义了基类型为int的指针变量p1和p2,可以用来指向整型变量i和j,但不能指向浮点型变量a和b。
说明:
基本的数据类型有(int、char、float等),既然有这些类型的变量,就可以有指向这些类型变量的指针,因此,指针变量是基本数据类型派生出来的类型,它不能离开基本类型独立存在。
下面的定义都是合法的:

float* p3; //p3是指向float型变量的指针变量,简称float指针
char* p4;  //p4是指向char型变量的指针变量,简称char指针

也可以在定义指针的同时对它初始化,如:

int*p1=&a,*p2=&b; //定义指针变量p1,p2并分别指向a,b

在定义指针变量时要注意:
(1)指针变量前面的*表示该变量为指针型变量。指针变量名是p1p2,而不是*p1*p2。要注意给指针变量赋值时,不能写成这样*p1=&a;,因为a的地址是赋给指针变量p1,而不是赋给*p1(即变量a)。
(2)在定义指针变量时必须指定基类型。不同的数据类型在内存中所占的字节数和存放方式不同。
指针变量是用来存放地址的,C语言的地址信息包括存储单元的位置信息和类型信息。指针变量的属性应与之匹配。例如:

int a,*p;
p=&a;

&a不仅包含变量a的位置(如编号为2000的存储单元),还包括“存储的数据类型”的信息。定义指针变量p的基类型为int,即它所指向的只能是整型数据,这时p才能接受&a的信息。
如果改为:

int a;
float*p;
p=&a;

&a是“整型变量a的地址”。编译时会出现一个警告:“把一个int型数据转换为float型数据”在赋值时,系统会把&a的基类型自动改换为float型,然后赋给p。但是p不能用这个地址指向整型变量。
所以指针或地址是包含有类型信息的。应该使赋值号两侧的类型一致,以避免出现意外结果。
指针的移动:
如果指针是指向一个整型变量的,那么“使指针移动1个位置”意味着移动4个字节。如果指针是指向一个字符变量的,则增加的是1。
所以必须指定指针变量所指向的变量的类型,即基类型。一个指针变量只能指向同一个类型的变量,不能忽而指向一个整型变量,忽而指向一个浮点型变量。
一个变量的指针的含义:
包含两个方面:一是以存储单元编号表示的纯地址(如编号为2000的字节),另一个是它指向的存储单元的类型(如int,char,float等)。
在说明变量类型时一般不能说“a是一个指针变量”,而应该完整地说:“a是指向整型数据的指针变量”。
(3)如何表示指针类型。指向整型数据的指针类型表示为“int*”,读作“指向int的指针”或简称“int指针”。
(4)指针变量中只能存放地址(即指针),不要将一个整数赋给一个指针变量。如*p=100,*p是指针变量,100是整数,不合法。在程序中不能用一个数值代表地址,地址只能用地址符“&”得到并赋给一个指针变量,如“p=&a;”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值