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;

posted @ 2020-02-24 16:25  Grooovvve  阅读(167)  评论(0编辑  收藏  举报