【发布时间】:2012-06-24 18:40:59
【问题描述】:
我是 C 的绝对新手,所以这可能是一个愚蠢的问题,警告!
如果有人想知道上下文,它的灵感来自于 Learn C the Hard Way 中 Exercise 16 的额外学分部分。
假设这些进口:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
给定一个像这样的简单结构:
struct Point {
int x;
int y;
};
如果我在堆上创建它的一个实例:
struct Point *center = malloc(sizeof(Point));
assert(center != NULL);
center->x = 0;
center->y = 0;
然后我知道我可以像这样打印结构在内存中的位置:
printf("Location: %p\n", (void*)center);
但是如果我在堆栈上创建它呢?
struct Point offCenter = { 1, 1 };
位于堆栈中的值在内存中的某个位置仍然存在。那么我如何获得这些信息呢?我是否需要创建一个指向我的新堆栈结构的指针然后使用它?
编辑: 哎呀,你猜这有点明显。感谢丹尼尔和克利福德!为了完整起见,这里是使用& 的打印示例:
printf("Location: %p\n", (void*)¢er);
【问题讨论】:
-
使用地址运算符
&offCenter。 -
@DanielFischer:请将其发布为答案 :) 我的意思是,真的,尼克应该如何选择评论作为最佳答案?
-
为时已晚,不值得复制。
-
请注意
printf的"%p"格式需要void*参数。如果要打印其他类型的指针的值,则应将其显式转换为void*:printf("Location: %p\n", (void*)center);或printf("Location: %p\n", (void*)&center);。在大多数系统上它可能在没有强制转换的情况下工作(因为通常所有指针都具有相同的表示),但不能保证。 -
+1 表示真正将时间/工作投入到一个问题中。