将结构体指针作为形参
时间: 2023-11-22 22:34:37 浏览: 52
将结构体指针作为形参时,可以通过该指针来间接访问和修改结构体变量的成员值。这是因为指针传递是将结构体变量的地址传递给形参,形参在函数中可以通过该地址来操作结构体变量。所以在函数中对结构体指针的操作会直接影响到原始结构体变量的值。
举例来说,如果我们有一个函数`void modify_student(Student *ptr)`,其中`ptr`是指向`Student`结构体的指针形参。在函数内部,我们可以通过`ptr`来修改`Student`结构体的成员值。例如,通过`ptr->name = "Alice"`来设置`name`成员的值为"Alice"。
请注意,结构体指针作为形参时,函数内部只能访问和修改该函数形参所指向的结构体变量。对于其他结构体变量,函数是无法直接访问和修改的。
相关问题
结构体指针函数 形参为结构体指针 c语言程序例子
结构体指针函数是指函数的形参为结构体指针。通过使用结构体指针作为函数的形参,可以在函数内部对结构体进行修改,从而实现对结构体的操作。下面是一个C语言程序的例子,演示了结构体指针函数的用法:
```c
#include <stdio.h>
// 定义一个结构体
struct Student {
char name[20];
int age;
};
// 结构体指针函数,修改结构体的值
void modifyStudent(struct Student *ptr) {
// 修改结构体的值
strcpy(ptr->name, "John");
ptr->age = 20;
}
int main() {
// 定义一个结构体变量
struct Student s;
// 调用结构体指针函数,传递结构体指针作为参数
modifyStudent(&s);
// 输出修改后的结构体的值
printf("Name: %s\n", s.name); // 输出:Name: John
printf("Age: %d\n", s.age); // 输出:Age: 20
return 0;
}
```
在上面的例子中,我们定义了一个结构体`Student`,包含了姓名和年龄两个成员变量。然后我们定义了一个结构体指针函数`modifyStudent`,该函数的形参为结构体指针`ptr`。在函数内部,我们通过指针修改了结构体的值。最后,在`main`函数中,我们创建了一个结构体变量`s`,并将其地址传递给`modifyStudent`函数进行修改。最终,我们输出了修改后的结构体的值。
结构体嵌套结构体作为函数形参
当我们需要在函数中操作结构体类型的数据时,可以将结构体类型作为函数的形参,这样在函数内部就可以对结构体类型数据进行操作。
如果结构体中嵌套了其他结构体,我们可以将嵌套的结构体类型作为结构体类型的成员之一,并在函数参数中传递该结构体类型。
例如,定义一个名为 `Student` 的结构体类型,其中嵌套了一个名为 `Birthday` 的结构体类型,代码如下:
```c
#include <stdio.h>
struct Birthday {
int year;
int month;
int day;
};
struct Student {
char name[20];
int age;
struct Birthday birthday;
};
void printStudent(struct Student stu) {
printf("Name: %s\n", stu.name);
printf("Age: %d\n", stu.age);
printf("Birthday: %d-%02d-%02d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
}
int main() {
struct Student stu = {"Tom", 18, {2000, 1, 1}};
printStudent(stu);
return 0;
}
```
在上面的示例中,我们定义了一个名为 `Birthday` 的结构体类型和一个名为 `Student` 的结构体类型,`Student` 结构体中嵌套了 `Birthday` 结构体类型。在 `printStudent` 函数中,我们将 `Student` 结构体类型作为参数传递,可以直接通过 `stu.birthday` 访问嵌套的 `Birthday` 结构体类型的成员变量。
当然,我们也可以将 `Student` 结构体类型的指针作为函数参数,代码如下:
```c
void printStudent(struct Student *pStu) {
printf("Name: %s\n", pStu->name);
printf("Age: %d\n", pStu->age);
printf("Birthday: %d-%02d-%02d\n", pStu->birthday.year, pStu->birthday.month, pStu->birthday.day);
}
int main() {
struct Student stu = {"Tom", 18, {2000, 1, 1}};
printStudent(&stu);
return 0;
}
```
注意,在函数中访问结构体类型的成员变量时,可以使用 `.` 运算符或 `->` 运算符,前者用于结构体类型变量,后者用于结构体类型指针。