指针与指针用法
指针与指针变量
在C语言中,将地址形象地称为“指针”。一个变量的地址称为变量的“指针”。一个专门用来存放另一个变量的地址的变量,则称它为“指针变量”。
或者说,如果有一个变量专门用来存放地址,那么这个变量就是指针变量,即存放变量地址的变量是指针变量。
指针的定义格式为:
基类型 *指针变量名
例:
int *a;
float *b;
char *c;
指针的用法
在变量前面加上符号&,表示变量的地址,如&a。可以将&a赋值给一个指针。
#include<stdio.h>
void main()
{
int a = 10;
int *i =&a;
}
需要注意的是:
对指针赋值时,指针的类型应与其指向的值的类型相一致。
而且int *p=&a
等价于 int *p; p=&a;
但在赋值时,还有一种表达方式是: *p=a
。
可是如果a是int型,int *p=a
是错误的,因为在定义的时候不能给p直接赋值整型,只能赋值int型地址 即 &a;
如果要给p指针指向的地址赋值,就可以*p=a;
但不能在定义*p的时候直接赋整型。
如果非要在定义时赋值,如int *p=a;
,则a必须是个地址或指针,也可以是数组名。
例如:
int a[5];
int *p=a; //前面定义是数组或是地址、指针,才可以这样赋值。
int a;
int *p=&a; //前面定义的a是普通变量,才可以这样赋值。
容易混的地方:
对于*p=a; //不是定义时赋值,是定义后赋值
来说,p和&a表示变量a的地址,*p和a表示变量a的值;
p++表示地址加1;
(*p)++表示指针指向的数据加1(即a+1);
在字符串中,*(p++)等同于s[n++]
指针数组和指向指针的指针
若在一个数组中,其元素均为指针类型数据,这样的数组称为指针数组。
类型名 *数组名[数组长度];
指向指针数据的指针变量,简称为指向指针的指针,通常称为二级指针。
类型名 **a;