在C中指向结构与malloc的指针?

时间:2012-09-22 16:25:27

标签: c

#include<stdio.h>

typedef struct telephone
{
    char *name;
    int number;
} TELEPHONE;

int main()
{
    //TELEPHONE index;
    TELEPHONE *ptr_myindex;
    ptr_myindex = (TELEPHONE*)malloc(sizeof(TELEPHONE)); 
    //ptr_myindex = &index;

    ptr_myindex->name = "Jane Doe";
    ptr_myindex->number = 12345;
    printf("Name: %s\n", ptr_myindex->name);
    printf("Telephone number: %d\n", ptr_myindex->number);

    free(ptr_myindex);

    return 0;
}

当我编译它时,它输出的结果与我不动态分配指向struct的结果相同,而是使用我的代码中已注释掉的部分。为什么会这样?

2 个答案:

答案 0 :(得分:3)

宣布:

TELEPHONE index

编译器知道结构TELEPHONE是什么类型,因此它分配了该结构所需的内存。

例如:

int a = 5;
int *p = &a;

这很完美。但是,如果我们想在没有int a = 5的情况下实现相同目标,我们应该执行以下操作:

int *p;
p = (int*)malloc(sizeof(int));
*p = 5;

有一点难度。第一个代码在stack中分配变量,而第二个代码在heap中分配变量。但在第二种情况下,在malloc之前没有为结构分配空间,并且唯一分配的空间是指针本身(不需要与结构本身相同的空间)。

答案 1 :(得分:2)

您的两个版本的代码执行以下操作:

  1. 在堆上分配结构。
  2. 将结构分配为局部变量。
  3. 这些选项在此程序中可以互换。分配给结构然后打印的代码并不关心结构是堆分配还是局部变量。