关于指针的理解
*指针用来调用变量的内存地址。
*每个变量都有自己的内存地址。
如果变量p的内容是变量i的地址,则p是一个指针变量。且称p指向i(p->i)。
*指针变量可以指向变量,数组,函数。
指向变量的指针变量
定义
类型符 *指针变量名;//(类型符是指针所指向变量的类型)
int i=100;
int *p;//指针变量p的定义形式
(&)取地址 //若a是数组,则a为地址常量,不能用a++。
(*)取指针变量所指内容
p = &i = &(*p)
i = *p = *(&i)
初始化和赋值
初始化:
int i=1;
int *p=&i;//将i的地址赋给p(指针变量)。
初始化为空指针:
int *p=0;
或者
int *p=NULL;//NULL在stdio.h中为符号常量,代表0.
赋值:
int i,*p,*q;
p=0;
p=&i;
q=p;//可得 p->i && q->i。
*赋值时指针变量不能带*,而且一定要赋值为地址或者0.
指针与数组
指针与一维数组
int a[10];
1.
int *p=a;(相当于int *p=a[0];
2.
int *p;
p=a;
3.
int *p;
p=&a[0];
*若把p初始化为a[0]的地址,那么a[i]可以用p[i]来表示(或者*(p+i))
p+i表示&a[i],引用a[i]可以用*(p+i)。
————————
则(p+1)==&a[1];
*(p+1)==a[1];
p++=&a[1];
*如果指针p,q指向同一数组,p-q等于两个指针之间元素的个数。
指针与二维数组
*把二维数组看做元素是一元数组的一元数组。
首先要知道
int a[3][4];
a=a[0][0];
a+1=a[1][0];
a[0]+1=a[0][1];
定义
(指向一维数组的指针变量(整体))
int a[4],(*p)[4]=&a;//类型符(*指针变量名)[数组长度]
所以*p=a
*如果是*p[4],则p是一个指针数组。
*可以让这个指针变量指向二维数组的某一行。
例如:
int a[3][4],(*p)[4]=a; //[]里的数必须和列数一致。
p->a[0]
p+1->a[1]
引用形式有四种,以a[0][0]和a[0][1]举例。
1.a[0]=a[0][0]=*a[0]=**a=(*a)[0]=*(a+0)
2.a[0]+1=a[0][1]=*(a[0]+1)=*(*(a+0)+1)=(*a)[1]