通过指针初始化结构

时间:2014-02-22 08:25:06

标签: c pointers structure

假设我们有

struct me  {
  int b;
};

void main() { 
  struct me *m1;
  m1->b=3;
}

我的问题是,因为m1是我的类型指针,目前是 不保存任何类型变量的地址,然后我们如何访问我的成员b 通过一个指向不指向任何类型变量的指针,如果我们可以那么类型我的哪个变量正在访问?

3 个答案:

答案 0 :(得分:3)

要么是

struct me m1;
m1.b = 3;

struct me *m1 = malloc(sizeof(struct me));
m1->b = 3;

当你处理C中的指针时,通常需要做三件事:

  • 创建指针
  • 确保在指针指向
  • 的位置分配内存
  • 使指针指向该内存

你的解决方案只做了第一个。

你的printf工作的原因是,实际的分配和阅读仍然有效。你在你的过程中覆盖了一些随机内存,这次没有任何灾难性的后果。但这是纯粹的“运气”。你也可能最终遇到了分段错误。

答案 1 :(得分:1)

1)你必须为你首先指向的对象分配空间

2)然后 - 然后 - 只能 - 你可以指定值m1-> b = 3

答案 2 :(得分:1)

void main()
{
    struct me *m1=malloc(sizeof(struct me)); //here allocating the memory first
    m1->b=3;

    //do what you want to do

    free(m1); //once you allocate the memory, you have to free it after your job is done
}

如果您没有分配内存和访问权限(就像您所做的那样),那么您正在访问m1所指向的内存部分。它会编译好。但如果m1的值超出代码段,则会产生segmentation fault。此外,如果它在您的细分中,它可能会覆盖其他值。所以在使用它之前总是需要分配内存。