存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
假设在程序中声明了1个int型的变量a,其值为68。系统为变量a分配的首地址为0X65FDF4H,pa是存放变量a地址的指针变量,即pa中存放的值为0x065FDF4H。
对变量a的访问有两种方式:一是直接按地址0x065FDF4H找到a的存储单元,从而对变量a进行访问;二是按系统为pa分配的地址先找到pa,然后根据pa的值(即变量a地址0x065FDF4H)找到变量a在内存中的存储单元,从而对变量a进行访问。对于前一种访问方式称为直接访问方式,后一种访问方式称为间接访问方式。
如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。
1. 定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2. 空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3. void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是有一点需要注意void*不能指向由const修饰的变量,eg const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv申明为const void * ptv;上述第三句(ptv = &test),才是合法的.
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv ;
② C语言中指针变量只能存储地址
指针变量是一个变量,它保存的是另一个变量的内存地址。你如果知道了这个指针变量保存的值,就可以知道它所指向变量的内存地址,于是就可以间接访问到那一个变量。
定义:指针变量类型
*指针变量名1,
*指针变量名2,
...
;
例如:
int
main(void)
{
int
*p;
/*定义*/
int
a;
p
=
&a;
/*把a的地址赋值到p中*/
*p
=
1;
/*间接访问a*/
return
0;
}
把指针作为函数的参数传递,可以使函数可以访问函数外部的变量,例如:
void
swap(int
*a,
int
*b)
{
int
c;
c
=
*a;
*a
=
*b,
*b
=
c;
}
指针也可以用于传递数组,数组名本身就是一个指针:
void
func(int
a[],
int
n)
{
.....
}
指针还可以指向指针,指向结构体(struct),指向数组
int
**p;
/*指向int指针*/
struct
xxx
*p;
int
(*p)[100];
/*指向一个int[100]数组,括号不可少*/
③ c语言中 指针的用法以及与地址的区别
果是在定义变量时候加在前面。
简单的理解,是在定义变量的时候使用呢,还是在访问变量的时候使用,就是你看它是在哪里使用,这里把指针指向的值取出来赋给b,意思是这个变量是指针变量,如
char
*a;
如果是在访问变量的时候加在前面,意思是取这个地址中指向的值,如
char
b=*a;
上面定义了a是一个字符指针