1. //  指针是什么  
  2. 一个变量的地址称为该变量的"指针" 
  3. 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为"指针变量" 
  4. "指针变量的值是地址"(即指针)  
  5.  
  6. //  指针变量  
  7. 1.使用指针变量的例子  
  8. 通过指针变量访问整型变量  
  9. 先定义2个整型变量,再定义2个指针变量,分别指向这2两个整型变量,通过访问指针变量,可以找到它们所指向的变量,  
  10. 从而得到这些变量的值。  
  11. #include "stdafx.h"  
  12.  
  13.  
  14. int _tmain(int argc, _TCHAR* argv[])  
  15. {  
  16.     int a=100,b=10;                             //定义整型变量a,b,并初始化  
  17.     int * pointer_1,* pointer_2;                //定义指向整型数据的指针变量 pointer_1,pointer_2  
  18.     pointer_1=&a;                               //把变量a的地址赋给指针变量 pointer_1  
  19.     pointer_2=&b;                               //把变量b的地址赋给指针变量 pointer_2  
  20.     printf("a=%d,b=%d\n",a,b);                    
  21.     printf("* pointer_1=%d,* pointer_2=%d\n",* pointer_1,* pointer_2);  
  22.     return 0;  
  23. }  
  24.  
  25. 2.怎样定义指针变量  
  26. 定义指针变量的一般形式为  
  27. 类型名 * 指针变量名;  
  28. 如:  
  29. int * pointer_1,* pointer_2;  
  30.  
  31. float * pointer_3;      //pointer_3是指向float型变量的指针变量,简称 float指针  
  32. float * pointer_4;      //pointer_4是指向字符型变量的指针变量,简称 char指针  
  33.  
  34. int * pointer_1=&a,* pointer_2=&b;      //定义指针变量pointer_1,pointer_2,并分别指向a,b  
  35.  
  36. a.指针变量前面的"*"表示该变量的类型为指针型变量  
  37.  
  38. b.在定义指针变量时 必须指定 基类型  
  39. 一个变量的指针的含义包括 两个方面,  
  40. 一是以存储单元编号表示的地址(如编号为 2000 的字节),  
  41. 一是它指向的存储单元的数据类型(如 int,char,float 等)。  
  42.  
  43. c.如何表示指针类型  
  44. 指向整型数据的指针类型表示为"int *",读为"指向int的指针"或简称"int指针" 
  45.  
  46. d.指针变量中智能存放地址(指针),不要将一个整数赋给一个指针变量。  
  47. 如:  
  48. * pointer_1=100;            //pointer_1 是指针变量,100是整数,不合法  
  49.  
  50. 3.怎样引用指针变量  
  51. a.给指针变量赋值。如:  
  52. p=&a;                       //把a的地址赋给指针变量p  
  53. 指针变量p的值是变量a的地址,p指向a  
  54.  
  55. b.引用指针变量指向的变量。  
  56. 如果已执行"p=&a;",即指针变量p指向了整型变量a,则  
  57. printf("%d",* p);  
  58. 其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值  
  59.  
  60. 如果有以下赋值语句:  
  61. * p=1;  
  62. 表示将整数1赋给p当前所指向的变量, 如果p指向变量a,则相当于把1赋给a,即"a=1;" 
  63.  
  64. c.引用指针变量的值。如:  
  65. printf("%o",p);  
  66. 作用是以八进制数形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,即&a  
  67.  
  68. 注:  
  69. (1) & 取地址运算符。&a是变量a的地址  
  70. (2) * 指针运算符(或称"间接访问"运算符),*p代表指针变量p指向的对象  
  71.  
  72. 输入a和b两个整数,按先大后小的顺序输出a和b  
  73. #include "stdafx.h"  
  74.  
  75.  
  76. int _tmain(int argc, _TCHAR* argv[])  
  77. {  
  78.     int * p1, * p2, * p,a,b;  
  79.     printf("please enter two integer numbers:");  
  80.     scanf_s("%d,%d",&a,&b);  
  81.     p1=&a,  
  82.         p2=&b;  
  83.     if(a<b)  
  84.     {p=p1;p1=p2;p2=p;}  
  85.     printf("a=%d,b=%d\n",a,b);  
  86.     printf("max=%d,min=%d\n",* p1,* p2);  
  87.     return 0;  
  88. }  
  89.  
  90. 4.指针变量作为函数参数  
  91. 对输入的两个整数按大小顺序输出,用函数处理,而且用指针类型的数据作为函数参数  
  92. #include "stdafx.h"  
  93.  
  94.  
  95. int _tmain(int argc, _TCHAR* argv[])  
  96. {  
  97.     void swap(int * p1,int * p2);  
  98.     int a,b;  
  99.     int * pointer_1,* pointer_2;  
  100.     printf("please enter a and b:");  
  101.         scanf_s("%d,%d",&a,&b);  
  102.     pointer_1=&a;  
  103.     pointer_2=&b;  
  104.         if(a<b) swap(pointer_1,pointer_2);  
  105.         printf("max=%d,min=%d\n",a,b);  
  106.     return 0;  
  107. }  
  108.  
  109. void swap(int * p1,int * p2)  
  110. {  
  111.     int temp;  
  112.     temp=* p1;  
  113.     * p1= * p2;  
  114.     * p2=temp;  
  115. }  
  116.  
  117. //swap是用户自定义函数,它的作用是交换两个变量(a和b)的值,swap函数的两个形参p1和p2是指针变量  
  118.  
  119. 输入3个整数a,b,c,要求按由大到小的顺序将它们输出,用函数实现  
  120. #include "stdafx.h"  
  121.  
  122.  
  123. int _tmain(int argc, _TCHAR* argv[])  
  124. {  
  125.     void exchange(int * q1,int * q2,int * q3);  
  126.     int a,b,c,* p1,* p2,* p3;  
  127.     printf("please enter three numbers:");  
  128.     scanf_s("%d,%d,%d",&a,&b,&c);  
  129.     p1=&a;p2=&b;p3=&c;  
  130.     exchange(p1,p2,p3);  
  131.     printf("The order is:%d,%d,%d\n",a,b,c);  
  132.     return 0;  
  133. }  
  134.  
  135. void exchange(int * q1,int * q2,int * q3)  
  136. {void swap(int * pt1,int * pt2);  
  137. if(* q1< * q2) swap(q1,q2);  
  138. if(* q1< * q3) swap(q1,q3);  
  139. if(* q2< * q3) swap(q2,q3);  
  140. }  
  141.  
  142. void swap(int * pt1,int * pt2)  
  143. {  
  144.     int temp;  
  145.     temp=* pt1;  
  146.     * pt1=* pt2;  
  147.     * pt2=temp;