• C++Review9_指针


    #include <iostream>
    
    using namespace std;
    
    int main() {
        int * p;
        int a = 5;
        p = &a;
        cout<<"sizeof a is "<<sizeof(a)<<endl;
        cout<<"sizeof p is "<<sizeof(p)<<endl;
        cout<<"&a is       "<<&a<<endl;
        cout<<"p is        "<<p<<endl;
        cout<<"a is        "<<a<<endl;
        cout<<"*p is       "<<*p<<endl;
        cout<<"&p is       "<<&p<<endl;
    
        *p = 6;
        cout<<"After opration  *p = 6"<<endl;
        cout<<"a is        "<<a<<endl;
        cout<<"*p is       "<<*p<<endl;
        return 0;
    }

    int * p; //定义了一个指针;
    实际上也是定义了一个变量,这个变量的类型是指向int的指针。
    这个变量在内存中获得到了一个4字节大小的空间;4字节正好可以表示内存的任意地址;
    这个4字节大小的空间是被用来存储地址值的;//这是指针不同于普通变量之处,其值会被解释为地址;
    所以指针变量的值,就是内存中某个空间的地址值;


    打印&p 会显示一个地址值,例如 0x0028ff0c,这是4字节大小内存空间的首地址,也就是指针变量所在的地址,通常是系统自动分配的,且与p变量名绑定,一旦绑定不可修改;


    打印 p 会显示p的值,p的值是4字节大小的值,是一个地址值。系统会把p的值解释为一个地址值。


    接下来假设0x0028ff0c为首地址的4个字节内存空间中存储的值为0x0028ff08,即地址值为0x0028ff08。

    换句话说指针p的值为0x0028ff08。

    *p表示什么呢?

    *p     ->首先符号*可以理解成一个钥匙;这个钥匙用来读取某个内存上的值;格式为:*(地址)=*p=*(0x0028ff08),实际上表示的是0x00112233这个地址上内存空间的值;这个过程也叫解引用。地址可以理解为引用。或者叫解地址也好。


    int *p = NULL; //定义一个指针变量时,同时给变量p赋了值;我们可以这么认为变量p,或者叫指针p,存储的值为0x00000000
    *p = NULL;       //表示的是在0x00000000为首地址的4个字节内存空间中,赋值为0x00 0x00 0x00 0x00;(特意分开);

    所以这个符号*在定义和赋值时表示的含义不一样,定义时表示的是指针,赋值时表示的是解引用。

    将数值存储到指定的内存地址:

    *p = 0x100;  //表示把0x0028ff08这个地址处内存空间值赋值为0x100;

  • 相关阅读:
    匈牙利算法-二分图的最大匹配
    UOJ 407(IOI2018 D1T3)
    UOJ 460
    UOJ 405(IOI2018 D1T1)
    Codeforces 1110E
    2.文件结构
    1.常用快捷键
    Python3.x和Python2.x的差异
    javascript 常用内置对象
    94. Binary Tree Inorder Traversal(非递归实现二叉树的中序遍历)
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12357449.html
Copyright © 2020-2023  润新知