c - 查找嵌套结构体成员变量的地址

标签 c

亲爱的 stackoverflow 爱好者,

首先,我是 stackoverflow 的新手,因此对于我所犯的任何错误,我提前表示歉意。

这是一种 C 语言难题。或者至少我对此感到困惑。代码如下。

struct outer_str
{
  struct nest_str1
  {
     int mem1;
  };
  struct nest_str2
  {
     int mem2;
  }nest_var2;
}outer_var;

int main()
{
   outer_var.nest_var2.mem2 = 111;
   printf("\n\nThe value of mem2 is %d\n\n",outer_var.nest_var2.mem2);

   // Statement to assign mem1 of nest_str1 with a value say 333;
   // Statement to print the value of mem1 of nest_str1;

   return 0;
}

正如注释所示,您必须访问嵌套结构nest_str1的成员变量mem1。另请注意,没有为嵌套结构 Nest_str1 声明结构变量。

抱着希望,我尝试了下面的代码,模仿了一些 C++。

outer_var.nest_str1.mem1=333;

当我使用GCC 4.6.3编译程序时,显示以下错误

"struct outer_str has no member named 'nest_str1' ".

然后我想到从嵌套结构体nest_str2的结构体变量nest_var2的地址中找到nest_str1的地址。我尝试了以下代码,

int main()
{
 int offset;
 struct nest_str1 * addr; 
 offset=sizeof(int); // There is only one integer mem1 in nest_str1
 addr=(struct nest_str1 *)((int *) & (outer_var.nest_var2) - offset);
 addr->mem1=333;
 printf("\n\nThe value of mem1 is %d\n\n",addr->mem1);
 return 0;
}

程序编译正常。但输出并不是我所期望的。我遇到运行时错误。

Segmentation fault (core dumped)

现在我什至不知道我的做法是否正确。所以我希望得到一些建议。我还担心我可能忽略了一些明显简单的解决方案。

我还想知道我们是否可以在下面给出的代码中访问mem1

struct outer_str
{

  struct nest_str1
  {
     int mem1;
  };

}outer_var;

我预先感谢大家的时间和耐心。

最佳答案

outer_var 中没有任何成员允许您访问 mem1(您还没有声明一个成员,您只是定义了一个类型称为nest_str1。)

将其更改为:

struct outer_str
{

  struct nest_str1
  {
     int mem1;
  } nest_var1;  // now there is a member!

}outer_var;

现在您可以:

outer_var.nest_var1.mem1 = 100;

您的尝试完全错误,mem1没有存储空间,因此即使您的代码有效,您很可能最终会写入mem2的位置.

关于c - 查找嵌套结构体成员变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365801/

相关文章:

c - 高级数字模式

c - SSE操作可在2D数组上实现循环,其中每个输出取决于包含该数组的3x3正方形(生命游戏)

c - 从C到Shell : About "system" instruction

c++ - 在内存空间打开文件

c - Windows 套接字错误代码 10055

iphone - 从 iphone 中的 .wav 文件读取时数据为空?

c - "undefined reference"连lib都有函数符号

c - 为什么 Ruby 1.8.7 中的 Symbol#to_proc 变慢了?

c - 链接多个 .c 文件

c - 变量的多个实例(静态、非静态)