美文网首页
C语言指针一

C语言指针一

作者: AuglyXu | 来源:发表于2018-09-07 13:08 被阅读0次

    指针

    • 指针变量?

      • 指针变量和普通变量一样, 都是用来保存数据的
      • 只不过和普通变量有一点区别, 普通变量可以保存int/char/float/double等类型的数据
      • 指针变量只能保存内存地址
      • 简而言之, 指针变量, 就是专门用于保存内存地址的变量
    • 指针变量的定义

    int *p;
    

    注意点:
    所有的指针变量占用的内存大小都一样,在32位编译器中, 占用4个字节,在64位编译器中, 占用8个字节

    int num;
    num = 9;
    int *p;
    p = #
    
    • 将num变量的占用内存最小的那个地址存储到指针变量p中
      • 只要一个变量中存储了另外一个变量的内存地址, 那么我们就说这个变量指向了另外一个变量
      • 只要一个变量中存储了另外一个变量的内存地址, 那么我们就可以根据这个内存地址找到另外一个变量的内存,从而操作那一块内存
     printf("&num = %p\n", &num); // &num = 0060FEA8
        // p和普通变量一样, 代表取出p中存储的值
        printf("p = %p\n", p); // p = 0060FEA8
    
        // printf("num = %i\n", num);
        // &p和普通&变量也一样, 代表取出p自己的内存地址
        printf("&p = %p\n", &p);
    

    用指针访问内存空间

    • 只要一个变量保存了另外一个变量的地址, 就代表这个变量指向了另外一个变量
    • 只要一个变量指向了另外一个变量, 就可以通过*变量名称方式, 操作另外一个变量的内存空间(即解引)
        // 1.定义一个普通变量
        int num;
        num = 6;
        // 2.定义一个指针变量
        int *p;
        // 3.利用指针变量, 保存某个变量的地址
        p = # // 将num的内存地址存储到了变量p中
    
        printf("修改之前: %i\n", num);//6
    //    num = 8;
        *p = 4; // 在指针变量前面加上*号, 代表访问指针指向的那块内存
        printf("修改之后: %i\n", num);//4
        printf("修改之后: %i\n", *p);//4
    

    指针注意点

    1.指针只能保存地址, 不能保存其它的值

    2.一个变量可以被多个指针指向

    3.指针的指向可以改变

    4.定义指针变量时前面的数据类型, 必须和将来要保存的变量前面的数据类型一致


    指针的内存表现

    int num = 9;
    int num2 = 10;
    int *p1,*p2;
    p1 = #
    p2 = &num2;
    

    指针具有类型

    • 指针为什么要有类型?
      • 由于指针变量指向的是某一个变量

      • 所以在获取指向变量中存储数据的时候, 指针是不知道要获取多少个字节的数据的

      • 所以指针变量的数据类型的作用, 就是告诉指针, 在获取指向变量的数据的时, 需要获取几个字节的数据


    指针案例

    #include <stdio.h>
    //int sum(int num1, int num2);
    void test(int num1, int num2, int *res1, int *res2, int *res3, int *res4);
    int main()
    {
        // 需求: 要求定义一个函数, 可以同时返回两个变量的和,差,积,商
        // 需要大家知道的是: 在C语言中, 默认情况下一个函数只能返回一个值
        // 如果想让某一个函数同时返回多个值, 可以借助指针来实现
        int a = 10;
        int b = 20;
    //    int res = sum(a, b);
    //    printf("res = %i\n", res);
    
        int d, e, f, g;
        test(a, b, &d, &e, &f, &g);
        printf("和 = %i\n", d);
        printf("差 = %i\n", e);
        printf("积 = %i\n", f);
        printf("商 = %i\n", g);
        return 0;
    //    printf("return 后面的语句\n");
    }
    
    /**
     * @brief test 可以同时返回两个变量的和,差,积,商
     * @param num1 参与运算的第一个变量
     * @param num2 参与运算的第二个变量
     * @param res1 和
     * @param res2 差
     * @param res3 积
     * @param res4 商
     */
    void test(int num1, int num2, int *res1, int *res2, int *res3, int *res4){
        *res1 = num1 + num2;
        *res2 = num1 - num2;
        *res3 = num1 * num2;
        *res4 = num1 / num2;
    }
    
    

    相关文章

      网友评论

          本文标题:C语言指针一

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