1.通过地址能找到所需的变量单元,地址指向该单元变量。
2.一个变量的地址称为该变量的“指针”
3.一个变量专门存放另一个变量地址(即指针),称为“指针变量”
4.定义指针变量一般形式 : int *pointer_1,*pointer_2;
Int为基类型 指针变量可指向的变量类型。
5.指针变量前面的“*“表示为该变量的类型为指针型变量
6.a是指向整型数据的指针变量(正确读法)
一、输入两个整数,按先大后小的顺序输出两个数
#include<stdio.h>
int main()
{
int*p,a,b,*p1,*p2;
printf("intputtwo numbers:");
scanf("%d%d",&a,&b);
p1=&a;p2=&b;
if(b>a)
{
p=p1;
p1=p2;
p2=p;
}
printf("maxnumber is %d",*p1);
}
二、现在用函数处理,而且用指针类型的数据作函数参数。
#include<stdio.h>
int main()
{
voidswap(int *,int *);
inta,b,*pointer_1,*pointer_2;
printf("pleaseinput two numbers :\n");
scanf("%d%d",&a,&b);
pointer_1= &a;
pointer_2= &b;
if(b>a)
{
swap(pointer_1,pointer_2);
}
printf("max= %d,min = %d",*pointer_1,*pointer_2);
return0 ;
}
void swap(int *p1,int *p2)
{
intp;
p=*p1;
*p1=*p2;
*p2=p;
}
函数中不可写成*p=*p1;因为由于未给p赋值,因此p中并无确定的值(它的值是不可预见的),所以指向的单元也是不可预见的。所以,对*p赋值就是向一个未知的存储单元赋值,不可以。
如果写成swap(int x,int y)
{
inttemp;
temp=x;
x=y;
y=temp;
}
注意1:传递值到函数形参,并未影响实参,形参交换之后便释放了。
注意2:不能企图通过改变指针形参的值而使指针实参的值改变。
注意3:不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向变量的值。
例三:输入3个整数a,b,c,要求由大到小的顺序将他们输出,用函数实现。
#include<stdio.h>
int main()
{
voidexchange(int *p11,int *p22,int *p33);
inta,b,c,*p1,*p2,*p3;
printf("pleaseinput three numbers:");
scanf("%d%d %d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("theorder is :%d >%d >%d",a,b,c);
return0;
}
void exchange(int *p11,int *p22,int *p33)
{
voidswap(int *q1,int *q2);
if(*p11<*p22)
swap(p11,p22);
if(*p11<*p33)
swap(p11,p33);
if(*p22<*p33)
swap(p22,p33);
}
void swap(int *q1,int *q2)
{
inttemp;
temp=*q1;
*q1=*q2;
*q2=temp;
}
总结:用指针做连接,改变数值(实参指针)