#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的结果相同,而是使用我的代码中已注释掉的部分。为什么会这样?
答案 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)
您的两个版本的代码执行以下操作:
这些选项在此程序中可以互换。分配给结构然后打印的代码并不关心结构是堆分配还是局部变量。