一、指针的定义、初始化及解引用
1、什么是指针?
在对程序进行编译时系统会给每个变量分配内存空间,在对一个变量进行操作时,会先对它的内存空间进行寻址,每一个变量都有它自己的地址,指针就相当于变量地址,通过指针能找到变量的内存单元。
2、直接访问和间接访问
直接到变量名标识的存储单元中读取变量的值叫做“直接寻址”
列如:
#include<stdio.h>
int main()
{
int a=0;
printf("a=%d\n",a);
return 0;
}
将变量a的地址存放到另一变量中,然后通过该变量找到变量a的地址,从而读取变量a的值叫做“间接寻址”
列如:
#include<stdio.h>
int main()
{
int a=0;
int *pa;
pa=&a;
printf("a=%d\n",*pa);
return 0;
}
3、指针变量的定义和初始化
定义指针变量的一般形式为:类型名 *指针变量名;
列如:int *pa
在定义指针变量时必须指定“基类型”,且指针变量的基类型必须和要存放的地址的变量的类型相同
列如:
int a;
int *pa;
float b;
pa=&a;//指针变量pa的基类型和变量a的基类型相同,所以正确
pa=&b//指针变量pa的基类型和变量b的基类型不同,所以此操作错误
在同时定义多个指针变量时要在每个指针变量前都加
∗
*
∗
列如:
int *pa,*ch;
在给指针变量进行初始化时可以在定义时进行,也可以在定义之后进行
列如:
int a=0;
int *pa=&a;//在对指针变量进行定义对指针变量进行赋值
pa=&a;//在对指针变量进行定义之后再对指针变量进行赋值;注意不能写成 *pa=&a
在使用指针变量之前必须对指针变量进行初始化
列如错误编码:
#include<stdio.h>
int main()
{
int a=0;
int *pa;
printf("pa=%p\n",pa);//此处是想输出指针变量pa指相的变量的地址但没有对指针变量进行初始化,所以此处错误
return 0;
}
正确编码:
#include<stdio.h>
int main()
{
int a=0;
int *pa;
pa=&a;
printf("pa=%p\n",pa);
return 0;
}
使用指针变量访问存储单元中的数据
#include<stdio.h>
int main()
{
int a=0;
int *pa;
pa=&a;
printf("a=%d\n",*pa);//这里的 *pa是指针的解引用,和定义的指针变量 int *pa不同
return 0;
}
在定义指针变量时 int ∗ * ∗pa; 指针变量是pa而不是 ∗ * ∗pa;在定义指针变量之后的pa是指地址, ∗ * ∗pa是指指针变量pa所指的内存单元内的数据