指针:一个变量的地址。
指针变量:存放另一变量的地址(即指针)。
(1)定义:
定义的一般形式:基类型 *指针变量名;
基类型:用来指定指针变量可以指向的变量的类型。
将决定指针移动和运算时的移动量。
构成:[存储类型] 数据类型
* :表示该变量为指针类型
例 int *p1,*p2;
float *q ;
static char *name;
注意:指针变量定义后,变量值不确定,应用前必须先赋值
(2) 进一步理解&与*运算符:
例如:int *p,a;
a=3;
*p=a;
这表明:
将&a——>p;
a——>*p
相当于:
p=&a;
*p=a=3;
(3)指针变量的初始化:
一般形式:[存储类型] 数据类型 *指针名=初始地址值;
1、变量与指针类型一致。
int i;
int *p=&i;
2、用已经初始化的指针变量做初值。
int i;
int *p=&i;
int *q=p;
3、auto型地址不能初始化static型指针。
int a;
static int *p;
*p=&a;//会报错
4、给指针变量赋值:
指针变量赋值:
int i, j;
int *p1, *p2;
p1=&i; p2=&j ;
i=3; *p1=5;
j=6; *p2=8;
使用该程序进行对指针初始化的理解。
#include<stdio.h>
int main()
{
int a, b, * p1, * p2;
a = 10; b = 9;
p1 = &a; p2 = &b;
printf("%d ", p1);
printf("%d ", p2);
printf("%d ",*p1);
printf("%d ",*p2);
}
编辑
*空指针变量的初始化
初始化原因是防止指针乱指;有的时候我们不知道要对变量赋多少值这个时候我们就用空指针来进行占位——>就是确定一个内存单元
#include <stdio.h>
void main( )
{
int *p=NULL;
printf("%x\n",p);
}
*、&同为2级、结合性:从右向左
int a,b,*p1,*p2;
p1=&a;
p2=&b;
&*p1=&a=p1;
*&a:先进性&a得到a的地址,在对a进行运算,即指向a地址所指向的变量,就是a。
运算符*、++:结合性:从右到左
(*p1)++ ->a++
p1++ ->(p1++) //p1原来指向a,现在指向下一个地址了。
指针变量作为函数参数的特点:
共享内存,双向传递。