美文网首页
C语言指针

C语言指针

作者: 一直很安静_25ae | 来源:发表于2019-06-17 15:02 被阅读0次

    一、指针变量的定义

    格式 :变量类型 *指针变量名
    举例 int *p ; char p;
    注意:定义变量的时候
    仅仅是指针变量的象征

    #include <stdio.h>
    
    void change(int);//函数的声明
    
    int main()
    {
        /*
        int a = 90;
        
        change(&a);
        
        printf("a=%d\n", a);//10 因为传的是地址,所以可以修改外部变量
        */
        
        // 基本数据类型的格式:变量类型  变量名;
        // 指针格式:变量类型 *变量名;  
        // 指针变量只能存储地址
        // 指针就一个作用:能够根据一个地址值,访问对应的存储空间
        // 指针变量p前面的int:指针变量p只能指向int类型的数据
        int *p;  // 定义了一个指针变量p
        
        int a = 90;
        
        // 指针变量p指向了变量a
        p = &a; // 指针变量只能存储地址
        
        *p = 10; //这个*的意义跟前面指针的定义含义是不一样的,定义的时候*只是一个标识,告诉编译器这是一个指针,而这里的*的含义是访问指向变量p指向的存储空间
        
        printf("%d\n", *p);
        
        //printf("%d\n", a);
        
        return 0;
    }
    
    void change(int n)
    {
        n = 10;
    }
    
    

    二、利用指针变量简单修改其他变量的值

    1.指向某个变量
    int a;
    int *p;
    p = &a;
    或者
    int *p = &a;
    2.修改所指向变量的值
    *p = 10;
    3.在函数内部修改外面变量的值
    int a = 10;
    change(&a);
    void change(int *n)
    {
    *n = 20;
    }

    三 指针的注意事项

    #include <stdio.h>
    
    int main()
    {
        /* 不建议的写法, int *p只能指向int类型的数据
        int *p;
        double d = 10.0;
        p = &d;
      */
        
        /* 指针变量只能存储地址
        int *p;
        p = 200;
        */
        
        /* 指针变量未经过初始化,不要拿来间接访问其他存储空间
        int *p;
        printf("%d\n", *p);
        */
        
       
        /*
       int a = 10;也可以用下面两句
        int a;
        a = 10;
        */
        
        /*
        int *p;
        p = &a;//这两句也可以用下面一行代替
       // 定义变量时的*仅仅是一个象征,没有其他特殊含义
        int *p = &a;
        */
       
        
        // 不正确的写法
        // *p = &a; //此时的*的含义是访问指向变量p指向的存储空间
        p = &a;
        
        // 这个时候的*的作用:访问指向变量p指向的存储空间
        *p = 20;
        
        
        char c = 'A';
        
        char *cp = &c;
        
        *cp = 'D';
        
        printf("%c\n", c);
        
        return 0;
    }
    
    

    指向指针的指针

    #include <stdio.h>
    int main()
    {
        int a = 10;
        
        int *p = &a;
        
        int **pp = &p;
          
        **pp = 20;
        
        printf("%d\n", a);
        
        return 0;
    }
    

    指向指针的指针示意图


    09-指向指针的指针.png

    空指针

    #include <stdio.h>
    int main()
    {
        double d = 10.5;
        double d2 = 10.5;
        
        double *p;
        p = &d;
        
        *p = 10.9;
        
        p = &d2;
        
        *p = 10.9;
        
        printf("d=%f, d2=%f\n", d, d2);
            
        // 清空指针
        p = 0;
        // p = NULL;
        
        // 清空指针后,不能再间接访问其他存储空间
        // *p = 100.7;
        
        return 0;
    }
    
    

    交换函数外面实参的值

    #include <stdio.h>
    void swap(int *v1, int *v2);
    
    int main()
    {    
        int a2 = 90;
        int b2 = 89;
        
        swap(&a2, &b2);
        
        printf("a2=%d, b2=%d\n", a2, b2);
        return 0;
    }
    
    /* 不能交换外面实参的值,仅仅是交换了内部指针的指向
    void swap(int *v1, int *v2)
    {
        int *temp;
        temp = v1;
        v1 = v2;
        v2 = temp;
    }*/
    
    // 完成两个整型变量值的互换
    void swap(int *v1, int *v2)
    {
        int temp = *v1;
        *v1 = *v2;
        *v2 = temp;
    }
    
    /* 交换的只是内部v1、v2的值
    void swap(int v1, int v2)
    {
        int temp = v1;
        v1 = v2;
        v2 = temp;
    }*/
    
    

    // 任何指针都占用8个字节的存储空间
    char *cp;
    int *ap;
    long *bp;

    %d int
    %f float\double
    %ld long
    %lld long long
    %c char
    %s 字符串
    %zd unsigned long

    相关文章

      网友评论

          本文标题:C语言指针

          本文链接:https://www.haomeiwen.com/subject/jcuafctx.html