C++C++

C++指针

2018-11-12  本文已影响10人  带着面包去流浪

指针:

指针:指针是一个其值为地址的变量,本质是一个地址。(就是一个存储地址的变量)

声明:指向地址的数据类型 * 指针变量名;(创建的指针可以初始化也可以不初始化)

(只要是出现了星号,而不管中间是不是有空格,我们便认为,这算是创建了一个指针变量. 如:int* a; int * n; int *b;均为指针)

解除:对于一个指针变量p,*p表示解除引用,将其应用于指针,可以得到该地址存储的值。且这个值就是常规的值。

比如:

int a = 12;

int *p;

p = &a;

cout<<"普通int类型:"<<a<<endl;  //普通int类型:12

cout<<"指针类型:"<<p<<endl;    //指针类型:005DFBE8

cout<<"解除指针类型(接触后为普通int类型):"<<*p<<endl; //解除指针类型(接触后为普通int类型):12

1、指针的类型:

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

如:int *p; //指针的类型是int *

2、指针所指向的类型:

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

如:int *p; //指针所指向的类型是int 

3、指针的值

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。

指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。

我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。

4、指针本身所占据的内存区

指针本身占了多大的内存可用函数sizeof(指针的类型)得到。在32位平台里,指针本身占据了4个字节的长度。

int a = 12;

int *p;

p = &a;

cout<<sizeof(&a)<<endl; //4

char b;

cout<<sizeof(&b)<<endl; //4

&(取址运算符)和*(间接访问运算符/解引用指针)

&运算符:当它后面跟一个变量名的时候,给出这个变量名的地址.

int a = 12;

int *p;

p = &a;

cout<<&a<<endl;  //00D4FAAC

printf("%p\n", p);  // //00D4FAAC    指针%p

*运算符:后面跟一个指针的时候,得到指针指向的内存中的内容.

int a = 12;

int *p;

p = &a;

cout<<&a<<endl;  //00D4FAAC

cout << *&a << endl; //12

printf("%d\n", *p);  //12   

参考:

深度长文教你彻底掌握C++/C指针(一):基石

C++指针详解

上一篇 下一篇

猜你喜欢

热点阅读