持有指向另一个结构的指针的 C 结构如何访问该内部结构指针的成员

标签 c pointers data-structures struct structure

结构如下

typedef struct _PROCESS_INFORMATION {
  HANDLE hProcess;
  HANDLE hThread;
  DWORD  dwProcessId;
  DWORD  dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;


struct PLAYER
{
  /* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;
  /* 0x4/4 */ unsigned long dword4;
  /* 0x8/8 */ unsigned long dword8;
  /* 0xC/12 */ unsigned long dwordC;
  //... Lots of fields here
}

这是TerminateProcess的原型(prototype)

BOOL WINAPI TerminateProcess(
  _In_  HANDLE hProcess,
  _In_  UINT uExitCode
);

我尝试了下面所有 3 个方法,但都失败了。

unsigned int v102; //exit code.
struct PLAYER *player; // eax@9

TerminateProcess(player->ProcessInformation->hProcess, v102);
TerminateProcess(player->ProcessInformation.hProcess, v102);
TerminateProcess(*(player->ProcessInformation)->hProcess, v102);

箭头->适用于PLAYER结构指针的其他成员,但如果structPLAYER内的成员是指向另一个成员的指针struct 然后我遇到编译器问题。

以上三个问题都给我带来了编译器问题。

也许我必须在 struct PLAYER 中使用 *LPPROCESS_INFORMATION 或者我必须使用 struct _PROCESS_INFORMATION * 因为我真的很讨厌使用 typedef

(是的,我一周前才开始使用 C,我通常使用 Java/C#/VB.NET 编写代码,所以这对我来说是全新的。)

编辑:似乎我发现了我使用愚蠢的 typedef 的问题,难怪我遇到了这么多问题。这些 typedef 消除了类型的使用,在本例中是 struct 所以我的结构非常困惑..

修复是替换

/* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;

/* 0x0/0 */ struct _PROCESS_INFORMATION *ProcessInformation;

现在我可以不间断地使用美丽的箭头

player->ProcessInformation->hProcess

这是正确的吗?

最佳答案

player->ProcessInformation->hProcess 

是正确的。祝你好运!

关于持有指向另一个结构的指针的 C 结构如何访问该内部结构指针的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258699/

相关文章:

c - 以下常量指针中,哪些被称为未定义行为?

c++ - 用一个线程做一个部分,用多个线程做一个for循环

c - C 中 float/double 的按位绝对值(转换过程中小数点丢失)

c - C中的指针传递

c - 取消引用指向结构的指针

c - 两次释放 glib 缓冲区是否安全?

c - 结构问题: initialization makes integer from pointer without a cast

C++ ostream 使用模板隐式删除

java - 用于维护多个服务器状态信息的有效数据结构

ruby-on-rails - 给定一组嵌套规则来决定值的最合乎逻辑的方法是什么?我们如何存储它?