码迷,mamicode.com
首页 > 其他好文 > 详细

<22>【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合

时间:2015-07-09 19:22:50      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:

【掌握】指针变量概念及定义方法

 

   1、指针变量
 
        用来存放地址的变量,就是指针变量
 
   2、指针?
 
        就是地址,地址是个常量
 
   3、指针变量的定义
 
 
        数据类型  *指针变量名;
 
 
      int *p;   //定义了一个指针变量,变量名是p
                //int表示,p只能存放一个int类型的变量的地址
 
      char *p1; //定义了一个指针变量,变量名是p1
                //p1只能存放一个char类型数变量的地址
 
      int num=10;
      char *p = &num; //警告
 
 
    4、指针变量定义的注意事项
 
      1)“*”  必须得有,如果没有就相当于定义一个普通变量
      2)指针变量能用来存放数值或者字符之类的吗? 不能
      3)指针变量,归根结底还是变量,也有全局和局部变量之分
 

【掌握】指针变量的初始化和引用

 

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    //定义两个变量,并且给变量进行初始 a = 4, b = 5
    int a=4,b=5;
    //先定义变量,然后在初始化变量值
    int a1;
    a1 = 10;
    
    //指针变量也是变量
    //指针变量的使用: 定义指针变量  ----> 初始化指针变量 ---> 使用(使用指针变量间接的存取内存单元的值)
    
    //指针变量如果不初始化会有什么后果?
    //结论:如果一个指针变量定义以后,如果不进行初始化
    //     这个指针变量存放的事一个垃圾数,这个指针变量,称之为 野指针
    
    //一定要避免操作野指针,因为可能会带来意向不到的错误
//    int *p10;  //值是一垃圾值,有可能存放是系统程序的地址
//    *p10 = 438; //可能会造成系统崩溃
//    
//    p10 = &a;
    
    
    
    //指针变量如何进行初始化,指针变量应该用地址初始化
    
    //1) 定义的同时进行初始化
    //     1)完全初始化
           int *p = &a;  //用a的地址初始化 p这个指针变量
                         //另外一种描述方法:p指向了a
    
           int *p1 = &a,*p2 = &a; //p1 p2都指向了a
    //     2)部分初始化
           int *p3 = &b,*p4;  //定义了两个指针变量 p3 p4
           p4 = &b;
    
    
    
    //2)先定义后初始化
    
        int *p7;
        p7 = NULL;  //建议不用这种写法
    
    
    
    //3)如果定义了一个指针变量,但是我不知道让这个指针指向谁
              int *p5 = NULL;  //NULL 是空(0)
              int *p6 = 0;     ////把一个指针赋值一个空,什么也不指
    
    //常见的易犯的错误
    
    //int *p8 = 1000;  杜绝
    p6 = p1;  //p6指向了a
    
    
    
    //******************2、用*来获取指针变量指向的存储单元的内容*****]
    //定义了一个整形变量  *p1 ,p1是一个指针变量
    // *指针变量  作用:获取指针变量指向的内存空间的内容
    //                获取指针变量值所对应的存储单元
    int value = *p1;  //4
    //          给指针变量指向的内存单元赋值
                *p1 = 100;
        value = *p1;  //100
    
    printf("value = %d\n",a);
    
    //"*" 的两种用法
    // 1) 用于定义一个指针变量
    // 2) 存储指针变量指向的存储空间的内容
    
    
    return 0;
}

【理解】两变量值交换的方法

 

 1 #include <stdio.h>
 2 
 3 /**
 4  *  不能交换
 5  *
 6  *  @param a <#a description#>
 7  *  @param b <#b description#>
 8  */
 9 void swap1(int a,int b){
10 
11     //此处实质上是形参a和b值得交换,
12     //跟实参没有关系
13     int temp;
14     temp = a;
15     a = b;
16     b = temp;
17 
18 }
19 
20 //怎么交换正确的交换两个变量的值
21 void swap2(int *p,int *p1){
22 
23     //形参变量的地址进行的交换
24     int *temp;
25     temp = p;
26     p = p1;
27     p1 = temp;
28 
29 }
30 
31 //终级解决方案
32 void swap3(int *p,int *p1){
33     
34     //通过指针直接修改变量的值了
35     int temp;
36     temp = *p;
37     *p = *p1;
38     *p1 = temp;
39     
40 }
41 
42 int main(int argc, const char * argv[]) {
43    
44     int a = 4,b = 5;  // a = 5,b = 4
45     printf("交换前:a = %d,b = %d\n",a,b);
46     swap3(&a, &b);
47     printf("交换后:a = %d,b = %d\n",a,b);
48     
49     
50     
51     return 0;
52 }

【掌握】总结*使用场合

 

指针的应用场景:
 
   1)在被函数中可以修改主调函数中的变量的值
 
 
   2)让函数可以有多个返回值
 

 1 #include <stdio.h>
 2 
 3 /**
 4  *  定义了一个函数
 5  *  在函数内部通过指针变量修改指针变量指向的内容
 6  *  @param p
 7  */
 8 void changValue(int *p){
 9 
10     *p = 100;
11 
12 }
13 
14 void test(){
15 
16     
17     int a = 1;
18     int *p1 = &a; //p1指向了a
19     
20     printf("%p\n",&a);
21     printf("%p\n",p1);
22     
23     changValue(p1);
24     
25     printf("%d\n",*p1);
26     printf("%d\n",a);
27 
28 }
29 
30 /**
31  *  用指针让函数可以有多个返回值
32  *  并不是有多个return
33  *
34  *  @param x <#x description#>
35  *  @param y <#y description#>
36  *
37  *  @return
38  */
39 void caculator(int x,int y,int *add,int *jian,int *cheng,float *chu){
40 
41     //在函数的内部访问了主调函数中的变量值
42     *add = x+y;
43     *jian = x-y;
44     *cheng = x*y;
45     *chu = x/(float)y;
46     
47 }
48 
49 int main(int argc, const char * argv[]) {
50     
51     test();
52 
53     int add=0;
54     int jian=0;
55     int cheng=0;
56     float chu=0.0f;
57     
58     caculator(12, 4, &add, &jian, &cheng, &chu);
59     
60     printf("add = %d\n",add);
61     printf("jian = %d\n",jian);
62     printf("cheng = %d\n",cheng);
63     printf("chu = %.2f\n",chu);
64     
65     return 0;
66 }
0x7fff5fbff70c
0x7fff5fbff70c
100
100
add = 16
jian = 8
cheng = 48
chu = 3.00

 

<22>【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合

标签:

原文地址:http://www.cnblogs.com/kongweiiwei/p/4633771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!