繁体   English   中英

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

[英]pointers to structs versus malloc in 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;
}

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

当您声明:

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. 将结构分配为局部变量。

这些选项在该程序中可以互换。 分配给该结构然后打印的代码不在乎该结构是堆分配的还是局部变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM