指针和变量

Jon*_*an. 3 c++ variables pointers

我只需要对变量做一些澄清

正常变量有两个"部分"吗?一部分是实际值,另一部分是该值在内存中的位置

是对的吗?

所以指针变量只是普通变量的位置部分,它本身没有值?

pax*_*blo 7

如果你在谈论C,那么指针只代表另一个间接层.

如果将变量a视为整数,&a(地址a)是位置,它包含该位置的值a.使用时a,您将从地址中获取值.

使用指针变量p时,也会从某个位置获取值.但是该位置的价值是另一个可以获得价值的位置.

所以,假设你有:

int a = 7;     // set a to 7.
int *p = &a;   // set p to the address of a.
Run Code Online (Sandbox Code Playgroud)

在此示例中,a堆栈上的变量位于0x1234,p位于堆栈的0x1236位置(16位int /指针系统).你记忆中的内容是:

           +--------+
0x1236 (p) | 0x1234 |
           +--------+
0x1234 (a) | 0x0007 |
           +--------+
Run Code Online (Sandbox Code Playgroud)

当你使用a时,例如:

int b = a;
Run Code Online (Sandbox Code Playgroud)

的值a在存储器位置0x1234的用于设置b.但是,用指针:

int c = *p;
Run Code Online (Sandbox Code Playgroud)

首先查找p内存位置0x1236(值为0x1234)的值,然后取消引用它(带'*')以获取值a.


sma*_*uck 6

"2部分"是一种奇怪的谈论方式.变量有一个值,位于内存中的某个位置.因此,例如,在地址0x0004处,您可以获得值7(变量v).

指针是包含地址的变量.因此,例如,在地址0xff0c处,您可以使用值0x0004(指针p).

在C:

v是7

&v(v的地址)是0x0004

p是0x0004

&p(p的地址)是0xff0c

*p(p指向的元素)是7

在实践中,您永远不必担心实际的地址,只需要担心关系.不要犹豫,写一些程序,包含非常简单的变量和变量指针,打印值,地址和解引用,我发现它在澄清指针方面有很大帮助.