指针变量的定义,初始化及引用
定义指针变量
int i,j;//定义整型变量i和j:存放整数
int *point1,*point2;//定义整形指针point1和point2存放整型变量地址
怎么理解这行代码?(*修饰的是谁?它前面的int还是后面的ponit1?
point1表示:变量名
*表示:指针(用来修饰它后面的point)
int表示:整型类型
int*point1表示:名为point1的整型指针变量(只能存放int型普通变量地址)
指针变量的初始化
和普通变量一样,指针变量在使用前必须进行初始化
初始化的目的通过建立起与合法的普通变量之间的指向关系·,实现指针的引用!
i = 3;//对普通变量进行初始化
j = 4;//对指针变量进行初始化
point1 = &i;//建立指向关系,实现指针引用
point2 = &j;//point1保存了i的地址,ponit1指向了i,*point1就是i
&i | → | 3 |
---|---|---|
point1 | 指向 | i |
&j | → | 4 |
point2 | 指向 | j |
指针变量的引用
*point1 = 6;//使用了运算符,让指针变量对所指变量进行引用
*point2 = 8; // *ponit1与i成为了同一个概念
指针变量一律上占有4个字节指针变量是用来存放地址的因为32位机上内含了32根地址总线(ab)
下面是验证方法:
#includ<stdio.h>
int main()
{
int *p;
printf("%d",sizeof(p));
return 0 ;
}
经典指针程序
输入a,b两个整数,输出a,b时,按先大后小顺序输出
#include <stdio.h>
int main() {
int a,b;
int *p1,*p2,*p;//定义指针变量
scanf("%d%d",&a,&b);//初始化普通整型变量
//初始化指针变量
p1 = &a;//建立合法指向关系,实现指针的引用:p1存了a的地址p1就指向了a,*p1就是a
p2 = &b;//p2保存了b的地址,p2就指向了b,*p2就是b。
if (*p1 < *p2)
{ //交换p1与p2里面的地址:改变指针里面的地址,就可以改变指向关系,进而改变引用关系,详细见下图
p = p1;
p1 = p2;
p2 = p;
}
printf("MAX=%d\n,MIN=%d\n",*p1,*p2);
return 0;
}//输出63
示意图:
3 | ⬅ | &a |
---|---|---|
a | 指向 | p1 |
6 | ⬅ | &b |
b | 指向 | p2 |