结构体指针不能直接初始化吗
时间: 2023-07-21 13:42:47 浏览: 91
关于结构体指针类型的强制转换
结构体指针可以直接初始化,但需要注意一些细节。
如果定义了一个结构体类型,例如:
```
struct Person {
char name[20];
int age;
};
```
那么可以定义一个指向该结构体类型的指针变量:
```
struct Person *p;
```
然后可以直接为该指针变量赋值,例如:
```
struct Person person = {"Tom", 20};
p = &person;
```
这里先定义了一个 `struct Person` 类型的变量 `person`,并初始化了它的成员 `name` 和 `age`。然后将 `person` 的地址赋给了指针变量 `p`。
也可以在定义指针变量时直接初始化,例如:
```
struct Person *p = &(struct Person){"Tom", 20};
```
这里使用了 C99 的特性,定义了一个匿名的 `struct Person` 类型的变量,并将它的地址赋给了指针变量 `p`。
需要注意的是,如果初始化的结构体是在栈上分配的临时变量,那么在离开该变量的作用域后,指针就会指向无效的内存区域,可能会导致程序崩溃或出现其他问题。因此,如果需要在函数之间传递结构体指针,建议使用动态内存分配函数(例如 `malloc`)分配内存,然后在不需要使用时释放内存。
阅读全文