【问题标题】:Initializing a member of a structure with pointers (C)用指针初始化结构的成员 (C)
【发布时间】:2016-08-30 03:00:26
【问题描述】:

我是一个初学者,一直在阅读 C 方面的书籍,我有一个关于结构指针的问题。 下面我尝试使用“*p”指针初始化结构的成员

#include <stdio.h>

struct part{
int num;
char *name;
};

int main()
{
   struct part *p;    //creating a pointer with 'struct part' type

   p->num= 5;          //initializing
   p->name= "Jose";

   printf("%d\n",p->num);
   printf("%s",p->name);

   return 0;
}

可能是一个愚蠢的问题,但我很想知道它为什么错了?程序明显崩溃了。

【问题讨论】:

    标签: c pointers structure


    【解决方案1】:

    你声明了一个指针,但它没有指向任何东西。

    你必须做例如p = malloc(sizeof(struct part))struct part q; p = &amp;q; 或以其他方式将其设置为首先指向某物。

    查看 this old classic 的 C 版本。

    【讨论】:

    • 感谢您的帮助。我可以问你一个问题。当你将指针设置为“结构部分”类型时,这些信息不会让编译器知道你的指针变量将占用多少内存空间吗?为什么需要显式地执行 malloc?
    • @tadm123 在我回答之前:你看视频了吗?
    • 好的,刚刚看了。我现在明白了,我猜他们没有指向任何东西,你不能给虚无赋予价值。谢谢,视频也很棒,哈哈
    • 这样公平吗? p=malloc(sizeof(*p))
    • @tadm123 是的,虽然有点奇怪,至少恕我直言。使用sizeof(your type) 更习惯一些。但我相信你可以找到两种方式的意见。但它确实有效。
    【解决方案2】:

    指针未初始化。它不指向有效内存,因此您不能通过它引用结构成员。做类似的事情

    struct part *p = malloc(sizeof(struct part));
    

    (如果这是这本 C 书中的实际示例 - 寻找更好的书?)

    【讨论】:

    • 不,这只是我尝试对编写不同代码的概念进行试验/错误。不过感谢您的帮助,我现在明白为什么了。
    【解决方案3】:
    #include <stdio.h>  
    #include <stdlib.h>
    
    struct part 
    {
      int num;
      char *name;
    };
    
    int main()
    {
    
    struct part *p = (struct part*)malloc(sizeof(struct part)); //memory allocation
    
    p->num = 5;
    p->name = "Jose";          //initializing
    
    printf("%d\n", p->num);
    printf("%s", p->name);
    
    return 0; }
    

    试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多