c 结构体指针的取值 赋值
时间: 2023-08-04 18:35:28 浏览: 116
结构体指针的取值和赋值可以通过操作符 "->" 和 "*" 来完成。
1. 取值操作符 "->":用于访问结构体指针所指向的结构体成员。
示例:
```
struct Person {
char name[20];
int age;
};
struct Person *p = (struct Person*)malloc(sizeof(struct Person));
strcpy(p->name, "Jack"); // 相当于 (*p).name = "Jack";
p->age = 20; // 相当于 (*p).age = 20;
```
2. 解引用操作符 "*":用于访问结构体指针所指向的结构体。
示例:
```
struct Person {
char name[20];
int age;
};
struct Person *p = (struct Person*)malloc(sizeof(struct Person));
strcpy((*p).name, "Jack"); // 相当于 p->name = "Jack";
(*p).age = 20; // 相当于 p->age = 20;
```
相关问题
c语言 结构体的成员是指针取值的写法
在 C 语言中,结构体的成员如果本身就是指针类型,可以直接通过结构体变量名加上`.`运算符或`->`运算符来访问其值。`.`通常用于静态存储类别(如栈上的结构体实例),而`->`用于动态分配的结构体(比如通过`malloc`创建的)。以下是示例:
假设我们有一个名为`Person`的结构体,其中包含一个指向`Address`类型的指针`home_address`:
```c
struct Address {
char street[50];
char city[30];
};
typedef struct Person {
char name[50];
struct Address* home_address; // 定义了一个指向Address的指针
} Person;
// 创建结构体实例并初始化指针
Person person;
person.name = "Alice";
person.home_address = malloc(sizeof(struct Address)); // 动态分配空间
person.home_address->street = "123 Main St"; // 使用->来取值和赋值
// 如果结构体在静态上下文中,也可以这样取值
Person static_person;
static_person.home_address->city = "New York";
```
要从`person`中取`home_address`的街道信息,只需编写`printf("%s", person.home_address->street);`。
复杂结构体利用指针取值的例子?
下面是一个复杂结构体利用指针取值例子,其中结构体嵌套了另一个结构体,并使用指针来访问和修改内部结构体的成员:
```c
#include <stdio.h>
// 内部结构体
struct address {
char city[20];
char street[50];
};
// 外部结构体
struct person {
char name[20];
int age;
struct address *addr;
};
int main() {
// 创建一个外部结构体变量
struct person p;
// 创建一个内部结构体变量
struct address a;
// 将内部结构体的地址赋值给外部结构体的指针成员
p.addr = &a;
// 通过指针访问和修改内部结构体的成员
strcpy(p.addr->city, "Beijing");
strcpy(p.addr->street, "Main Street");
// 输出外部结构体的成员和内部结构体的成员
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
printf("Address: %s, %s\n", p.addr->city, p.addr->street);
return 0;
}
```
在上述代码中,我们定义了两个结构体:`address`和`person`。`person`结构体包含一个指向`address`结构体的指针成员`addr`。
在`main`函数中,我们创建了一个外部结构体变量`p`和一个内部结构体变量`a`。然后,我们将`a`的地址赋值给`p.addr`,即将外部结构体的指针成员指向内部结构体。
通过指针访问和修改内部结构体的成员时,我们使用`->`运算符来访问指针所指向的结构体的成员。例如,`p.addr->city`表示访问内部结构体的`city`成员。
最后,我们在`main`函数中输出了外部结构体的成员和内部结构体的成员,可以看到通过指针成功访问和修改了内部结构体的成员。
这个例子展示了如何使用指针来取值和修改复杂结构体中的成员,通过指针可以方便地访问和操作嵌套结构体中的数据。
阅读全文