访问内存中的数据有两种方式:直接访问和间接访问。
直接访问通过变量来实现,变量是内存中某一块存储区域的名称。
间接访问是通过指针来实现的,指针存储的不是数据,而是数据在内存中的地址,访问指针可以达到访问内存中数据的目的。
指针就是内存地址,使用指针来访问变量,就是直接对内存中的数据进行的操作。
内存地址
计算机程序中的所有数据,都必须存储在计算机的存储单元里面,而且可以从计算机的存储单元中取出来。每个存储单元都有唯一的地址,像家里的门牌号、学生的学号一样。
存储的是整型数据的话,会占据四个存储单元,从a到a+3;运用取地址符&输出的对象的地址是它在内存中的首地址也就是a。
计算机内存被划分成按照顺序编号的内存单元,编号就是地址。在程序里定义了一个变量后,在对程序进行编译时,系统会给这个变量分配内存单元。
内存和指针
变量的内存地址就是变量的指针。一个变量,里面存储的是另一个变量的地址,那么这个变量称为指针变量。
指针变量的定义形式:
指向数据类型 *指针变量名
int i;//定义整型变量i
int *p1;//定义指向整型变量的指针变量p1
char j;//定义字符型变量j
char *p2;//定义指向字符型变量的指针变量p2
p1=&i;//给p1赋值i的地址
p2=&j;//给p2赋值j的地址
定义指针变量的时候注意:
int *a,指针变量名是a不是*a,*a是个表达式
定义指针变量的时候要明确它指向的数据类型
指针变量里面只可以存放地址(指针),不可以将非零数(或其他非地址类型的数据)赋值给指针变量。
指针变量的值为0时,称这个指针为空指针,定义指针变量后不给他初始的值时,会默认赋值为0.
指针变量
*叫作指针运算符 表示获取指针变量指向的变量的值。
函数实现两个从大到小输出
#include
//void swap(int *m1,int *m2)//指针变量m1 m2 分别指向a b
//{
// int temp;
// temp=*m1;
// *m1=*m2;
// *m2=temp;
//
// printf("swap函数中的输出n");
// printf("*m1=%d,*m2=%d",*m1,*m2);
//
//}
//void swap(int *m1,int *m2)//指针变量m1 m2 分别指向a b
//{
// int *temp;
// temp=m1;
// m1=m2;
// m2=temp;
//
// printf("swap函数中的输出n");
// printf("*m1=%d,*m2=%dn",*m1,*m2);
//
//}
void swap(int *m1,int *m2)//指针变量m1 m2 分别指向a b
{
int *temp;
temp=*m1;
*m1=*m2;
*m2=temp;
printf("swap函数中的输出n");
printf("*m1=%d,*m2=%dn",*m1,*m2);
}
int main()
{
int a,b;
int *p1=&a,*p2=&b;//指针初始化 p1指向a p2指向b
printf("输入两个变量n");
scanf("%d%d",&a,&b);
if(a
图90
图91
指针的运算
指针的运算包括 对指针赋值,移动指针、指针相减、指针和指针或指针与地址之间进行比较等。
指针的运算就是地址的运算。
int a;int *p=&a;那么p+1就是向地址增加的方向移动了4个字节。
*(p-1)和*p-1是不同的,头一个是p指向的地址减去一个存储单元后的数据,后一个是指p所指向的存储单元的值减去1.
指针与函数
指针变量是可以指向一个函数的,函数在程序编译的时候被分配了一个入口地址;这个函数的入口地址叫做函数的指针。
函数指针变量的用途:把指针作为参数传递到其他的函数。实现函数地址的传递,这样就可以在被调用的函数中使用实参函数。
指向函数的整型指针int (*p)(int,int);
p=max;
int max(int x,int y)
返回指针的函数
类型名 *函数名(参数列表);
Void指针类型
void指针类型,可以用来指向一个抽象类型的数据,将他的值赋给另一个指针变量时要进行强制类型转换。
void *p2;
char *p1;
p1=(char *)p2;
图90
图91
指针的运算
指针的运算包括 对指针赋值,移动指针、指针相减、指针和指针或指针与地址之间进行比较等。
指针的运算就是地址的运算。
int a;int *p=&a;那么p+1就是向地址增加的方向移动了4个字节。
*(p-1)和*p-1是不同的,头一个是p指向的地址减去一个存储单元后的数据,后一个是指p所指向的存储单元的值减去1.
指针与函数
指针变量是可以指向一个函数的,函数在程序编译的时候被分配了一个入口地址;这个函数的入口地址叫做函数的指针。
函数指针变量的用途:把指针作为参数传递到其他的函数。实现函数地址的传递,这样就可以在被调用的函数中使用实参函数。
指向函数的整型指针int (*p)(int,int);
p=max;
int max(int x,int y)
返回指针的函数
类型名 *函数名(参数列表);
Void指针类型
void指针类型,可以用来指向一个抽象类型的数据,将他的值赋给另一个指针变量时要进行强制类型转换。
void *p2;
char *p1;
p1=(char *)p2;



