C ++指针和内存分配方面的指针标识

时间:2014-06-24 11:48:14

标签: c++ c pointers memory memory-management

作为专业编程概念的新手,我想到C ++指针它们是内存块的地址。从逻辑上讲,任何指向它们的东西确实指向第一个变量。

如果int x = 0;int y points to int x;现在再次int c points to int y,它确实指向int x;我认为这是真的吗?

我的问题是,关于int yint c,作为指针的两个变量,如何在C ++中管理自己的内存?

一般来说,我的问题是指针本身如何处理内存分配?因为指针本身是组织记忆的一种突出方式。

提前致谢

3 个答案:

答案 0 :(得分:8)

如果你的意思是

int x = 0;
int* y = &x;
int* c = y;

然后是的,yc都指向x位于内存中的位置。

此外,yc都是不同的变量,并为它们分配了自己的内存。这可以通过打印变量的地址轻松验证,即打印&y&c


更具图形性,就像这样:

int x = 0;

分配一些内存并将其初始化为零:

+---+
| x |
+---+

然后

int* y = &x;

将如下所示:

+---+     +---+
| y | --> | x |
+---+     +---+

最后

int* c = y;

将使它看起来像这样:

+---+
| y | --\
+---+    \     +---+
          >--> | x |
+---+    /     +---+
| c | --/
+---+

另请注意,指针变量实际上与任何其他整数变量没有区别,该值只是它们指向的地址。它只是编译器以特殊方式处理它们。

答案 1 :(得分:3)

指针就像其他变量一样,因此它们就像其他变量一样被分配。 (如果是自动变量,可以在堆栈上分配,如果是动态分配则可以分配到堆,如果指针是静态/全局,则可以分配给数据部分)

例如:

int x = 0;
int *y = &x;
int *z = y;

这里y和z在堆栈上分配,它们都包含x的地址。

y和z是指向同一位置x的两个不同对象。

作为类比,你可以看到下面的例子

int a = 42;
int b = 42;

此处ab是包含相同值的两个不同变量。

答案 2 :(得分:1)

  

如果int x = 0;int y points to int x;现在再次int c points to int y,它确实指向int x;我认为这是真的?

没有。如果你的意思是

int x = 0;
int *y = &x;
int **c = &y;  

然后y*c指向x,而c指向y

  

我的问题是指针本身如何处理内存分配?

指针本身是在堆栈上分配的,但它们指向的对象可以在堆上分配,如果

int *p = malloc(sizeof(int*10));