【问题标题】:Structure pointer returning the start byte of member of structure [duplicate]返回结构成员的起始字节的结构指针[重复]
【发布时间】:2019-04-22 17:46:23
【问题描述】:

结构指针返回结构成员的起始字节 .我想知道它是如何工作的。请有人帮助我了解这一点。

 #include <stdio.h>

 typedef struct node {
  char mem;
  double mem2;
  char mem3;
  int mem4;
  char mem5;
  char mem6;
 }NODE;
 int main()
 {
     NODE * m;
     printf("%u",&m->mem3);
     return 0;
 }

输出为 16

【问题讨论】:

  • 您没有为NODE *m 分配内存。您正在调用未定义的行为。
  • 你能详细说明你的问题吗?
  • 或多或少确切相同的问题as this one。请告诉班上的其他人不要发布重复内容。
  • 另外,将打印更改为printf("%c", m-&gt;mem3);。请注意您不需要&amp;,您已经使用-&gt; 运算符取消引用。
  • 它在这里返回结构成员的起始字节。(即)mem-0,mem2-8,mem3 -16,mem4 -20,mem5-24,mem6 - 25。它如何返回起始字节数。 @Micha Wiedenmann @Sourav Ghosh @Blaze

标签: c memory struct segmentation-fault


【解决方案1】:

程序实际上应该崩溃,因为指针 m 没有指向有效的内存位置。下面的代码可以给出结果。

NODE M;
NODE *ptr = &m;
Printf(“%x”, &ptr->mem3);

%x 将给出十六进制地址值。

【讨论】:

  • 不崩溃也可以编译检查。
  • 对于指针,您不应使用%x,而应使用%p 格式说明符。
猜你喜欢
  • 2018-05-10
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多