除了使用malloc函数,申请一个结构体指针并初始化
时间: 2023-07-19 09:31:42 浏览: 51
除了使用malloc函数,还可以使用静态分配的方式来申请结构体指针并初始化,具体方法如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct person {
char name[20];
int age;
};
int main() {
// 静态分配结构体指针
struct person *p = NULL;
struct person p1 = {"张三", 20};
// 将静态分配的结构体指针指向结构体变量
p = &p1;
// 访问结构体成员
printf("姓名:%s,年龄:%d\n", p->name, p->age);
return 0;
}
```
在上面的代码中,我们首先定义了一个结构体`person`,然后通过静态分配的方式申请了一个结构体指针`p`,然后将其指向结构体变量`p1`,最后访问结构体成员。需要注意的是,静态分配的结构体指针只能指向已经存在的结构体变量,而不能像使用`malloc`函数那样动态地创建新的结构体变量。
相关问题
c++结构体指针变量初始化
在C++中,结构体指针变量的初始化可以通过以下两种方式实现:
1.使用new运算符动态分配内存并初始化结构体指针变量:
```c++
struct Student {
char* Name;
int number;
char csex;
};
Student* stu = new Student(); // 动态分配内存并初始化结构体指针变量
stu->Name = new char[sizeof(char)]; // 初始化结构体指针的成员指针
```
2.使用malloc函数动态分配内存并初始化结构体指针变量:
```c++
struct Student {
char* Name;
int number;
char csex;
};
Student* stu = (Student*)malloc(sizeof(Student)); // 动态分配内存并初始化结构体指针变量
stu->Name = (char*)malloc(sizeof(char)); // 初始化结构体指针的成员指针
```
需要注意的是,结构体指针变量的成员指针也需要初始化并分配内存。
memset初始化一个结构体指针
在C语言中,可以使用memset函数初始化一个结构体指针。该函数的原型如下:
```
void *memset(void *s, int c, size_t n);
```
其中,s是指向要初始化的内存块的指针,c是要设置的值,n是要设置的字节数。
如果要初始化一个结构体指针,可以将结构体指针作为第一个参数传递给memset函数,将0作为第二个参数传递给memset函数,将结构体的大小作为第三个参数传递给memset函数。
例如,假设有一个结构体定义如下:
```
typedef struct {
int x;
int y;
} Point;
```
可以使用以下代码初始化一个Point类型的结构体指针:
```
Point *p = malloc(sizeof(Point));
memset(p, 0, sizeof(Point));
```
这将把p指向的内存块中所有的字节都设置为0,从而将结构体中的x和y成员的值都设置为0。