指针

作者: RicherYY | 来源:发表于2018-05-02 16:09 被阅读0次

    指针式C语言的灵魂,我简单写一下自己的见解

    指针(pointer)简介

    指针是一个值为内存地址的变量
    变量就是一个内存地址

    指针1.PNG

    int *ptr_year取地址
    ptr_year = &year
    就是把int year的地址赋给了ptr_year
    我们就说ptr_year指向了变量

    指针的基本用法

    数据类型 * 指针变量名

    指针2.PNG
    定义指针的时候最好加ptr或者p
    int ptr_num = NULL; //指针初始值为空,不指向任何地址
    

    &取地址符

    指针3.PNG

    相当于取num的地址赋给了ptr_num变量

    代码练习

    int main()
    {
        int num = 9;
        int * ptr_num = #
        printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
    

    间接运算符*

    指针4.PNG

    相当于根据*ptr_num的地址所对应的空间直接去修改
    相当于操控这个空间 这个地址对应的值直接修改

    抽象一点儿讲指针就相当于一个名片(*)就是取这个地址的值
    &是取地址,千万不要混淆

    nt main()
    {
        int num = 9;
        int * ptr_num = #
        printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
        printf("ptr_num对应的值为;%d\n",*ptr_num);                   //取ptr_num所对应的值
    

    星号是取值的意思

    代码练习

    int main()
    {
        int num = 9;
        int * ptr_num = #
        printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
     
        //使用指针修改变量值
        *ptr_num = 9999;                                              //找到这个地址所对应的空间,然后把这个空间的值修改成9999
        printf("修改之后的值为;%d",*ptr_num);                        //打印num表示相同值
    

    通过指针的地址找到原指针对应的值

    int main()
    {
        int num = 9;
        int * ptr_num = #
        int ** ptr_num2 = &ptr_num;                                  //这里需要定义变量
        printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
        printf("ptr_num对应的值为;%d\n",*ptr_num);                   //取ptr_num所对应的值
        //使用指针修改变量值
        *ptr_num = 9999;                                             //找到这个地址所对应的空间,然后把这个空间的值修改成9999
        printf("修改之后的值为;%d\n",*ptr_num);                      //打印num表示相同
    
        printf("指针的内存地址;%p\n",ptr_num2);
        
        //如何通过指针的指针地址,访问到原指针所对应的内存空间?
        printf("\n原空间num所对应的值为;%d\n",**ptr_num2);
    

    练习

    int main()
    {
        int num1 = 1024;
        int num2 = 2048;
        int * ptr1;
        int * ptr2;
        ptr1 = &num1;
        ptr2 = &num2;
    
        printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
        printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
        //将变量1的值赋给变量2
        //*ptr2 = *ptr1;等价写法 num1 = num2
    
        ptr2 = ptr1;                            //ptr1和ptr2的地址都指向num1的值
        printf("重新赋值以后结果\n");
        printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
        printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
    
    
        *ptr2 = 11111;
        printf("重新赋值以后结果\n");
        printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
        printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
    
    指针5.PNG

    相关文章

      网友评论

        本文标题:指针

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