指针-----地址
通过变量名访问变量,称为直接储存
int i=3;
通过地址(指针)访问变量,称为间接储存
int *i_pointer;
i_pointer=&i;//将i的地址分配给i_pointer
*i_pointer=50;//i的值由3改变为50
1,定义指针变量
基类型 *指针变量名
说明:基类型可以是任意数据类型,指定指针变量可指向的数据类型,用来说明指针变量占用几个字节数
* 说明其后的变量名是指针变量名
指针变量名是任意合法的标识符
定义:一个该变量的地址称为该变量的指针:地址2000是变量i的指针,如果有 一个变量专门用来存放另一变量的地址(即指针),这称它为指针变量
例如
int *pointerA;//*pointerA不能指向除int以外的类型
printf("%o",pointerA);//输出pointerA的地址
2,指针变量赋值
1)先定义,后赋值
int * pointerA;
int a;
pointerA=&a;
2)初始化,定义的同时赋值
int a,*pointerA=&a;
3)两个运算符
&取地址符,后面操作数必须是变量
(* ) 指针运算符,后面的操作数必须是指针
int a=3;
int *pointA=&a;
&a 正确,表示a的地址
&pa 正确,表示pa的地址
*a 错误
*pa 正确,表示的是pa指向的变量,即a
*&a 正确,表示的就是a
*&pa 正确,表示的是pa,即&a
&* 如果正确使用,则两个运算符可以相互抵消
3.通过指针访问变量(间接访问)
*代表指针所指向的内存单元,*后面只能跟地址变量(指针变量)
int a=3;
int *pointerA;
k=*pointerA //把a的值赋给k
*pointerA=5;//间接访问,把5赋给*pointer,即a的值也改变
a=5;//直接访问
printf("a=%d",a);//直接访问
printf("a=%d",*pointerA)//间接访问
利用指针变量交换a,b的值
案例一
#include "stdio.h"
void main()
{
void exchange(int x,int y);
int a=1,b=2;
exchange(a,b);
printf("a=%d,b=%d",a,b);
}
void exchange(int x,int y)
{
int t;
t=x;
x=y;
y=t;
} //a,b的值并未改变
案例二
#include "stdio.h"
void main()
{
void exchange(int *x,int *y);
int a=1,b=2;
exchange(a,b);
printf("a=%d,b=%d",a,b);
}
void exchange(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
} //a,b的值已交换
案例三
#inaclude "stdio.h"
void main()
{
void exchange(int *x,int *y);
int a=1,b=2;
int *p=&a;
exchange(p,&b); //p即a的地址
printf("a=%d",a);
}
void exchange(int *x,int *y)
{ //值不会改变,exchange中只交换了x,y所指向的地址
int *t;
t=x;
x=y;
y=t;
}
案例四
#inaclude "stdio.h"
void main()
{
void exchange(int *x,int *y);
int a=1,b=2;
int *p=&a;
exchange(p,&b); //p即a的地址
printf("a=%d",a);
}
void exchange(int *x,int *y)
{ //值不会改变,exchange中只交换了x,y所指向的地址
int *t;
*t=*x;//x没有地址存放
*x=*y;
*y=*t;//错误,*t无确定的指向,没有它指向的地址
}
在函数中比较两个元素,输出最大值,最小值,
用指针实现两个元素值的交换
#include"stdio.h"
void main()
{
void swap(int *p1,int *p2);
int a,b;
printf("请输入a,b ");
scanf("%d %d",&a,&b);
if(a<b)
swap(&a,&b);
printf("max=%d min=%d",a,b);
}
void swap(int *p1,int*p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
输入3个数,要求按从大到小顺序输出
用函数实现
#include"stdio.h"
void exchange(int *p1,int *p2,int *p3);
void swap(int *pt1,int *pt2);
int main()
{
int a,b,c;
printf("请输入a,b,c ");
scanf("%d %d %d",&a,&b,&c);
exchange(&a,&b,&c);
printf("%d %d %d",a,b,c);
}
void exchange(int*p1,int *p2,int *p3)
{
if(*p1<*p2) swap(p1,p2);
if(*p2<*p3) swap(p2,p3);
if(*p1<*p2) swao(p1,p2);
}
void swap(int *pt1,int *pt2)
{
int t;
t=*pt1;
pt1=*pt2;
*pt2=t;
}
#include"stdio.h"
void exchange(int *p1,int *p2,int *p3);
void swap(int *pt1,int *pt2);
int main()
{
int *p1,*p2,*p3;
int a=1,b=2,c=8;
p1=&a,p2=&b,p3=&c;
exchange(p1,p2,p3);
printf("%d %d %d",a,b,c);
}
void exchange(int*p1,int *p2,int *p3)
{
if(*p1<*p2) swap(p1,p2);
if(*p2<*p3) swap(p2,p3);
if(*p1<*p2) swao(p1,p2);
}
void swap(int *pt1,int *pt2)
{
int t;
t=*pt1;
pt1=*pt2;
*pt2=t;
}