作为专业编程概念的新手,我想到C ++指针它们是内存块的地址。从逻辑上讲,任何指向它们的东西确实指向第一个变量。
如果int x = 0;
则int y points to int x
;现在再次int c points to int y
,它确实指向int x
;我认为这是真的吗?
我的问题是,关于int y
和int c
,作为指针的两个变量,如何在C ++中管理自己的内存?
一般来说,我的问题是指针本身如何处理内存分配?因为指针本身是组织记忆的一种突出方式。
提前致谢
答案 0 :(得分:8)
如果你的意思是
int x = 0;
int* y = &x;
int* c = y;
然后是的,y
和c
都指向x
位于内存中的位置。
此外,y
和c
都是不同的变量,并为它们分配了自己的内存。这可以通过打印变量的地址轻松验证,即打印&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;
此处a
和b
是包含相同值的两个不同变量。
答案 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));