结构体指针变量可以直接赋值吗
时间: 2024-05-08 18:16:42 浏览: 16
可以直接赋值。结构体指针变量可以指向同一类型的结构体变量或者指向NULL。例如:
```
struct person {
char name[20];
int age;
};
struct person p1 = {"Tom", 20};
struct person *p2 = &p1;
p2->age = 22;
// p2指向p1,修改p2的值同时也修改了p1的值
printf("%s is %d years old.\n", p1.name, p1.age); // output: Tom is 22 years old.
struct person *p3 = NULL; // p3指向NULL
```
相关问题
c语言结构体指针变量赋值
假设有以下结构体定义:
```
struct student {
char name[20];
int age;
float gpa;
};
```
可以定义一个结构体指针变量来指向该结构体:
```
struct student *ptr;
```
然后可以动态分配内存空间给该指针变量:
```
ptr = (struct student*) malloc(sizeof(struct student));
```
接着可以给该结构体指针变量赋值,例如:
```
strcpy(ptr->name, "Tom");
ptr->age = 20;
ptr->gpa = 3.5;
```
这样就给结构体指针变量 ptr 的成员变量赋值了。
结构体成员指针变量赋值
结构体成员指针变量赋值的方法如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int iAge;
char szAddr1[100];
char *pszAddr2;
char **pszAddr3;
} T_PeopleInfo;
int main() {
T_PeopleInfo people;
char *pszAddr2 = "Beijing";
char *pszAddr3 = "China";
people.iAge = 18;
strcpy(people.szAddr1, "Shanghai");
people.pszAddr2 = pszAddr2;
people.pszAddr3 = &pszAddr3;
printf("Age: %d\n", people.iAge);
printf("Address 1: %s\n", people.szAddr1);
printf("Address 2: %s\n", people.pszAddr2);
printf("Address 3: %s\n", *(people.pszAddr3));
return 0;
}
```
在上述代码中,我们定义了一个结构体T_PeopleInfo,其中包含了4个成员变量,其中3个是指针类型。我们通过定义指针变量pszAddr2和pszAddr3,将其分别赋值给结构体成员变量people.pszAddr2和people.pszAddr3。在输出时,我们使用printf函数输出结构体成员变量的值。