- // 指针是什么
- 一个变量的地址称为该变量的"指针"
- 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为"指针变量"
- "指针变量的值是地址"(即指针)
- // 指针变量
- 1.使用指针变量的例子
- 通过指针变量访问整型变量
- 先定义2个整型变量,再定义2个指针变量,分别指向这2两个整型变量,通过访问指针变量,可以找到它们所指向的变量,
- 从而得到这些变量的值。
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int a=100,b=10; //定义整型变量a,b,并初始化
- int * pointer_1,* pointer_2; //定义指向整型数据的指针变量 pointer_1,pointer_2
- pointer_1=&a; //把变量a的地址赋给指针变量 pointer_1
- pointer_2=&b; //把变量b的地址赋给指针变量 pointer_2
- printf("a=%d,b=%d\n",a,b);
- printf("* pointer_1=%d,* pointer_2=%d\n",* pointer_1,* pointer_2);
- return 0;
- }
- 2.怎样定义指针变量
- 定义指针变量的一般形式为
- 类型名 * 指针变量名;
- 如:
- int * pointer_1,* pointer_2;
- float * pointer_3; //pointer_3是指向float型变量的指针变量,简称 float指针
- float * pointer_4; //pointer_4是指向字符型变量的指针变量,简称 char指针
- int * pointer_1=&a,* pointer_2=&b; //定义指针变量pointer_1,pointer_2,并分别指向a,b
- a.指针变量前面的"*"表示该变量的类型为指针型变量
- b.在定义指针变量时 必须指定 基类型
- 一个变量的指针的含义包括 两个方面,
- 一是以存储单元编号表示的地址(如编号为 2000 的字节),
- 一是它指向的存储单元的数据类型(如 int,char,float 等)。
- c.如何表示指针类型
- 指向整型数据的指针类型表示为"int *",读为"指向int的指针"或简称"int指针"
- d.指针变量中智能存放地址(指针),不要将一个整数赋给一个指针变量。
- 如:
- * pointer_1=100; //pointer_1 是指针变量,100是整数,不合法
- 3.怎样引用指针变量
- a.给指针变量赋值。如:
- p=&a; //把a的地址赋给指针变量p
- 指针变量p的值是变量a的地址,p指向a
- b.引用指针变量指向的变量。
- 如果已执行"p=&a;",即指针变量p指向了整型变量a,则
- printf("%d",* p);
- 其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值
- 如果有以下赋值语句:
- * p=1;
- 表示将整数1赋给p当前所指向的变量, 如果p指向变量a,则相当于把1赋给a,即"a=1;"
- c.引用指针变量的值。如:
- printf("%o",p);
- 作用是以八进制数形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,即&a
- 注:
- (1) & 取地址运算符。&a是变量a的地址
- (2) * 指针运算符(或称"间接访问"运算符),*p代表指针变量p指向的对象
- 输入a和b两个整数,按先大后小的顺序输出a和b
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int * p1, * p2, * p,a,b;
- printf("please enter two integer numbers:");
- scanf_s("%d,%d",&a,&b);
- p1=&a,
- p2=&b;
- if(a<b)
- {p=p1;p1=p2;p2=p;}
- printf("a=%d,b=%d\n",a,b);
- printf("max=%d,min=%d\n",* p1,* p2);
- return 0;
- }
- 4.指针变量作为函数参数
- 对输入的两个整数按大小顺序输出,用函数处理,而且用指针类型的数据作为函数参数
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- void swap(int * p1,int * p2);
- int a,b;
- int * pointer_1,* pointer_2;
- printf("please enter a and b:");
- scanf_s("%d,%d",&a,&b);
- pointer_1=&a;
- pointer_2=&b;
- if(a<b) swap(pointer_1,pointer_2);
- printf("max=%d,min=%d\n",a,b);
- return 0;
- }
- void swap(int * p1,int * p2)
- {
- int temp;
- temp=* p1;
- * p1= * p2;
- * p2=temp;
- }
- //swap是用户自定义函数,它的作用是交换两个变量(a和b)的值,swap函数的两个形参p1和p2是指针变量
- 输入3个整数a,b,c,要求按由大到小的顺序将它们输出,用函数实现
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- void exchange(int * q1,int * q2,int * q3);
- int a,b,c,* p1,* p2,* p3;
- printf("please enter three numbers:");
- scanf_s("%d,%d,%d",&a,&b,&c);
- p1=&a;p2=&b;p3=&c;
- exchange(p1,p2,p3);
- printf("The order is:%d,%d,%d\n",a,b,c);
- return 0;
- }
- void exchange(int * q1,int * q2,int * q3)
- {void swap(int * pt1,int * pt2);
- if(* q1< * q2) swap(q1,q2);
- if(* q1< * q3) swap(q1,q3);
- if(* q2< * q3) swap(q2,q3);
- }
- void swap(int * pt1,int * pt2)
- {
- int temp;
- temp=* pt1;
- * pt1=* pt2;
- * pt2=temp;
- }
转载于:https://blog.51cto.com/290692/1162448