zoukankan      html  css  js  c++  java
  • 指针的初步认识

    #include <stdio.h>
    int main()
    {
        //显示变量的地址
        //指针是一个特殊的变量,存储的地址
        int i = 0;
        printf("0x%p
    ",&i);
        //上面中的%p,指的是printf中以输出地址的占位符
        //&i,表示取指针,返回一个指向i的int类型指针,它存储的值是i的地址
    
        {
             printf("%i
    ",&i);
             //%i  ,表示以十进制输出地址
            //会报两个警告,说类型不匹配
            //warning: format '%i' expects argument of type 'int',  but argument 2 has type 'int *' [-Wformat=]
        }
    
        return 0;
    }
    
    
    #include <stdio.h>
    int main()
    {
        int i=0;
        int *p;           //声明一个指针变量,* 用来说明该变量是一个指针
        p=&i;           //把i的地址赋值给指针p,也就是说p存了指向i的地址
        printf("&i=%p
    ",&i);
        printf("p=%p
    ",p);    //&i=000000000061FE14
                                           //p=000000000061FE14
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //通过指针进行读取
        int i = 9;
        int *p;
        p = &i;
        printf("%d
    ",*p);      // * 指针运算符,指的是取它后面指针所指向的值   p是指针,存储着指向i的地址
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //通过指针对变量进行修改
        int i = 8;
        int *p = &i;
        printf("i=%d
    ",i);
        printf("*p=%d
    ",*p);
        *p=7;
        printf("i=%d
    ",i);
        printf("*p=%d
    ",*p);
        i=6;
        printf("i=%d
    ",i);
        printf("*p=%d
    ",*p);
        return 0;
    }
    
    i=8
    *p=8
    i=7
    *p=7
    i=6
    *p=6
    
    #include <stdio.h>
    int main()
    {
        //野指针
        int *p;
        printf("%p",p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //野指针
        int *p;
        printf("%p",p);
        *p=0;
        int *pInt=0;
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //更新指针保存的地址
        int i=10;
        int j=20;
        int *p=&i;
        printf("i的地址:%p
    ",&i);
        printf("j的地址:%p
    ",&j);
        printf("p保存的地址:%p
    ",p);
        p=&j;
        printf("更改后地址
    ");
        printf("i的地址:%p
    ",&i);
        printf("j的地址:%p
    ",&j);
        printf("p保存的地址:%p
    ",p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指针自身的地址
        int i=10;
        int *p=&i;
        printf("p的地址:%p
    ",&p);
        printf("p保存的地址:%p
    ",p);
        printf("p指向的变量的值:%d
    ",*p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指针的加减运算
        int i=10;
        int *p=&i;
        printf("指针p保存的地址为%p
    ",p);
        p++;
        printf("自加后,指针p保存的地址为%p
    ",p);
        p--;
        printf("自减后,指针p保存的地址为%p
    ",p);
        p-=2;
        printf("减2后,指针p保存的地址为%p
    ",p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指针的赋值运算
        int i=10;
        int j=20;
        int *p1=&i;
        int *p2=&j;
        printf("p1=%p	p2=%p
    ",p1,p2);
        p1=p2;
        printf("p1=%p	p2=%p
    ",p1,p2);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指针的相减运算
        int i=10;
        int j=20;
        int *p1=&i;
        int *p2=&j;
        printf("p1=%p
    ",p1);
        printf("p2=%p
    ",p2);
        *p1=p1-p2;
        printf("p1-p2=%d
    ",*p1);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指针的相减运算
        int i=10;
        int j=20;
        int *p1=&i;
        int *p2=&j;
        printf("p1=%p
    ",p1);
        printf("p2=%p
    ",p2);
        if(p1>p2)
            printf("p1的地址p2地址大
    ");
        else
            printf("p2的地址比p1地址大
    ");
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指针的类型
        char ch;
        int i;
        char *pCh=&ch;
        int  *pInt=&i;
        printf("pCh保存的地址为:%p
    ",pCh);
        pCh++;
        printf("自加后,pCh保存的地址为:%p
    ",pCh);
        printf("pInt保存的地址为:%p
    ",pInt);
        pInt++;
        printf("自加后,pInt保存的地址为:%p
    ",pInt);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //常量指针
        int i=0;
        int *const p=&i;
        //p++;//指针不可修改
        *p=1;
        i++;
        printf("i=%d
    ",*p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指向常量的指针
        int i=0;
        const int *p=&i;
        printf("*p=%d
    ",*p);
        p++;
        //*p=1; 指针指向的是常量,不能修改
        printf("*p=%d
    ",*p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指向常量的常指针
        int i=0;
        const int *const p=&i;  //int const *p
        printf("*p=%d
    ",*p);
        //p++;   //指针是常量,不能修改  
        //*p=1; //指针指向的是常量,不能修改
        printf("*p=%d
    ",*p);
        return 0;
    }
    
    #include <stdio.h>
    int main()
    {
        //指向常量的常指针
        int i=0;
        int const *p=&i;  //int const *p
        printf("*p=%d
    ",*p);
        p++;   //
        //*p=1; //指针指向的是常量,不能修改
        printf("*p=%d
    ",*p);
        return 0;
    }
    
  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/delongzhang/p/14773686.html
Copyright © 2011-2022 走看看