【问题标题】:What can I get from a struct pointer?我可以从结构指针中得到什么?
【发布时间】:2011-11-03 20:53:49
【问题描述】:

我正在重写一个将结构指针作为参数的方法。我没有结构的声明,所以我不知道它的大小等。我可以从一个指向它的指针中找到什么?

【问题讨论】:

  • 如果你想对指针做任何事情,你必须有结构的定义。
  • 如果你知道它取的是一个指向结构体的指针,你不知道它是什么结构体吗?

标签: c++ objective-c c pointers struct


【解决方案1】:

我可以从一个指向结构的指针中找到什么?

什么都没有。

此模式opaque pointer 用于隐藏实现。事实上,您无法推断指针背后的内容是设计使然。

【讨论】:

  • @user1000039 不透明意味着您不打算查看内部。你不需要往里看。
  • @user1000039:不要求指针的数值与物理内存有任何关系。就标准而言,它只是“指向一个变量”。只要你不知道它有一个有效值,你就不能用它做任何事情。
  • @user1000039 你所做的就是忠实地将它传递给其他请求它作为参数的函数。你不需要往里看。
  • @MooingDuck:您可能会收到一个指向结构的非空指针,但您可能仍然无法调用sizeof(*p),因为该结构可能是“不完整类型”。指向不完整类型的指针通常用于“编译器防火墙”/“PIMPL”模式。
  • 请将任何扩展讨论发送至Stack Overflow Chat。如果这里有一个具体的问题,当然把它作为一个问题来问会更好。
【解决方案2】:

如果您只使用指针,则不需要大小。如果您真的想知道那里有什么,请使用 gdb,在您有活动指针的地方停下来,然后取消引用它 (p *myStruct)。

【讨论】:

  • 可执行文件的调试符号已被剥离。我无法附加 gdb
  • 您绝对可以将 gdb 附加到没有 gdb 符号的进程。您仍然可以按照建议打印指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 2010-10-19
  • 2022-11-22
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多