继前面函数的结束,这篇文章我们开始指针的讲解,代码均来自VS环境下。
目录
一、什么是指针
由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008“指向”该房间。因此,将地址形象化地称为“指针”,意思是通过它能找到以它为地址的内存单元。
注意:
- 对变量的访问都是通过地址进行的。
- 直接按变量名进行的访问,称为“直接访问”方式。
- 另一种称为“间接访问”的方式,即将变量i的地址存放在另一变量中,然后通过该变量来找到变量i的地址,从而访问i变量。
注意:区分“指针”和“指针变量”这两个概念。例如,可以说变量i的指针是2000,而不能说i的指针变量是2000。指针是一个地址,而指针变量是存放地址的变量。 指针变量的值是指针!
二、指针变量
1.怎样定义指针变量
定义指针变量的一般形式为:
类型名 * 指针变量名
如:
int *pointer_1, *pointer_2;
左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。例如,上面定义的、基类型为int的指针变量pointer_1和pointer_2,可以用来指向整型的变量i和j,但不能指向浮点型变量a和 b。
注意:
在定义指针变量时必须指定基类型。有的读者认为既然指针变量是存放地址的,那么只须指定其为“指针型变量”即可,为什么还要指定基类型呢?要知道不同类型的数据在内存中所占的字节数和存放方式是不同的。
一个变量的指针的含义包括两个方面,一是以存储单元编号表示的纯地址(如编号为2000 的字节),一是它指向的存储单元的数据类型(如int,char,float等)。
2.怎样引用指针变量
在引用指针变量时,可能有3种情况:
(1)给指针变量赋值。如:
p=&a; //把a的地址赋给指针变量p
指针变量p的值是变量a的地址,p指向a。
(2)引用指针变量指向的变量。
如果已执行“p=&a;”,即指针变量p指向了整型变量a,则printf("%d",*p);其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。如果有以下赋值语句:*p=1;
表示将整数1赋给p当前所指向的变量,如果p指向变量a则相当于把1赋给a,即“a=1;”。
(3)引用指针变量的值。如:
printf("%o",p);
作用是以八进制数形式输出指针变量p的值,如果p指向了a就是输出了a的地址,即&a。
【例1】输入a和b两个整数,按先大后小的顺序输出a和b。
#include<stdio.h>
int main()
{
int *pl,*p2,*p,a,b;
printf("please enter two integer numbers:");
scanf("%d,%d",&a,&b);
pl=&a;
p2=&b;
if(a<b)
{
p=pl;
pl=p2;
p2=p;
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*pl,*p2);
return 0;
}