标签: memory-address

如果不是内存地址,究竟什么是C指针?

在有关C的信誉良好的来源中,在讨论了&运营商之后给出了以下信息:

...有点不幸的是,术语[地址]仍然存在,因为它混淆了那些不知道地址是什么的人,并误导那些做的人:把指针当作地址通常会导致悲伤...... .

我读过的其他材料(来自同等声誉的来源,我会说)总是毫不掩饰地将指针和&操作符称为给出内存地址.我很想继续寻找事情的实际情况,但是当信誉良好的消息来源不同意时,这很难.

现在我有点困惑 - 究竟什么是指针,那么,如果不是内存地址?

PS

作者后来说:......我将继续使用"地址"一词,因为发明一个不同的 [术语] 会更糟.

c pointers memory-address

205
推荐指数
13
解决办法
3万
查看次数

当操作符超载时,如何可靠地获取对象的地址?

考虑以下程序:

struct ghost
{
    // ghosts like to pretend that they don't exist
    ghost* operator&() const volatile { return 0; }
};

int main()
{
    ghost clyde;
    ghost* clydes_address = &clyde; // darn; that's not clyde's address :'( 
}
Run Code Online (Sandbox Code Playgroud)

我怎么得到clyde地址?

我正在寻找一种适用于所有类型对象的解决方案.C++ 03解决方案会很好,但我也对C++ 11解决方案感兴趣.如果可能,让我们避免任何特定于实现的行为.

我知道C++ 11的std::addressof函数模板,但我不想在这里使用它:我想了解标准库实现者如何实现这个函数模板.

c++ operator-overloading memory-address c++11

167
推荐指数
5
解决办法
2万
查看次数

正确的格式说明符打印指针或地址?

我应该使用哪种格式说明符来打印变量的地址?下面很多我很困惑.

%u - 无符号整数

%x - 十六进制值

%p - 无效指针

哪个是打印地址的最佳格式?

c format pointers memory-address

167
推荐指数
5
解决办法
25万
查看次数

访问对象内存地址

当您object.__repr__()在Python中调用该方法时,您会得到类似这样的内容:

<__main__.Test object at 0x2aba1c0cf890> 
Run Code Online (Sandbox Code Playgroud)

如果你超载__repr__(),有没有办法得到一个内存地址,除了调用super(Class, obj).__repr__()和重新出现之外?

python object repr memory-address

154
推荐指数
6
解决办法
17万
查看次数

Java中变量的内存地址

请看下面的图片.当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址.

当我们写作时,new我们可以看到一个"特殊"字符串作为输出.我的问题是:

  1. 这个输出是什么?
  2. 如果是操作系统给我们的内存地址:

    a)如何将此字符串转换为二进制?

    b)如何获得一个整数变量地址?

替代文字

java jvm memory-management hashcode memory-address

128
推荐指数
5
解决办法
13万
查看次数

C++双地址运算符?(&&)

我正在阅读STL源代码,我不知道&&运算符应该做什么.以下是一个代码示例stl_vector.h:

vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
    // NB: DR 675.
    this->clear();
    this->swap(__x); 
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

"地址"是否有意义?为什么它有两个地址运算符而不是一个?

c++ stl memory-address operator-keyword

116
推荐指数
5
解决办法
9万
查看次数

在C中打印值的地址或指针

我想做一些看似相当简单的事情.我得到了结果,但问题是,我无法知道结果是否正确.

我在C工作,我有两个指针; 我想打印指针的内容.我不想取消引用指针来获取指向的值,我只想要指针存储的地址.

我写了下面的代码,我需要知道的是,如果它是正确的,如果没有,我该如何纠正它.

/* item one is a parameter and it comes in as: const void* item1   */
const Emp* emp1 = (const Emp*) item1; 

printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );
Run Code Online (Sandbox Code Playgroud)

虽然我发布这个(以及重要的是它是正确的)是我最终需要这样做一个指针到指针.那是:

const Emp** emp1 = (const Emp**) item1; 
Run Code Online (Sandbox Code Playgroud)

c pointers memory-address

77
推荐指数
5
解决办法
22万
查看次数

打印Python变量的内存地址

如何在Python 2.7中打印变量的内存地址?我知道id()返回变量或对象的'id',但这不会返回我期望看到的内存地址的预期0x3357e182样式.我想做类似的事情,例如print &x,x是C++ int变量.我怎么能用Python做到这一点?

python memory-address

70
推荐指数
3
解决办法
12万
查看次数

在Linux上,为什么字符串文字的内存地址与其他文件的内存地址如此不同?

我注意到字符串文字在内存中的地址与其他常量和变量(Linux OS)的地址非常不同:它们有许多前导零(不打印).

例:

const char *h = "Hi";
int i = 1;
printf ("%p\n", (void *) h);
printf ("%p\n", (void *) &i);
Run Code Online (Sandbox Code Playgroud)

输出:

0x400634
0x7fffc1ef1a4c
Run Code Online (Sandbox Code Playgroud)

我知道它们存储在.rodata可执行文件的一部分中.操作系统之后是否有一种特殊的方式处理它,所以文字最终会出现在一个特殊的内存区域(带有前导零)?这个内存位置有什么优点还是有什么特别之处呢?

c linux memory string-literals memory-address

62
推荐指数
3
解决办法
4815
查看次数

是否可以将标签的地址存储在变量中并使用goto跳转到它?

我知道每个人都讨厌搞砸.在我的代码中,由于我考虑过并且很满意的原因,他们提供了一个有效的解决方案(即我不是在寻找"不要那样做"作为答案,我理解你的预订,并理解我为什么使用它们无论如何).

到目前为止,它们一直很棒,但我希望以这样的方式扩展功能,这要求我基本上能够存储指向标签的指针,然后再转到它们.

如果此代码有效,它将代表我需要的功能类型.但它不起作用,30分钟的谷歌搜索没有透露任何东西.有没有人有任何想法?

int main (void)
{
  int i=1;
  void* the_label_pointer;

  the_label:

  the_label_pointer = &the_label;

  if( i-- )
    goto *the_label_pointer;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c label pointers goto memory-address

53
推荐指数
8
解决办法
3万
查看次数