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;
    }
    
  • 相关阅读:
    常用的一些js方法
    git常用命令
    thread join和detach的区别
    C和C++的区别和联系
    C++面试集锦( 面试被问到的问题 )
    C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
    C++ 多态的实现及原理
    获取当前操作系统的ip
    CString的头文件
    C++ 多用户模式下同一个exe只能运行一次
  • 原文地址:https://www.cnblogs.com/delongzhang/p/14773686.html
Copyright © 2011-2022 走看看