函数和结构体

* 传递和返回结构、传递结构的地址*

#include <iostream>
using namespace std;
struct order {
    char *order_num;
    char *user_name;
    string address;
};
/**
 * 当结构比较小时使用值传递
 */
void print_order(const order order) {
    cout << "order_num = " << order.order_num << endl;
    cout << "user_name = " << order.user_name << endl;
    cout << "address = " << order.address << endl;
}
/**
 * 传递地址,由于函数不修改结构内容,使用const修饰符
 */
void print_order(const order *order) {
    cout << "order_num = " << order->order_num << endl;
    cout << "user_name = " << order->user_name << endl;
    cout << "address = " << order->address << endl;
}
/**
 * 返回结构
 */
order build_order(char *order_num, char *user_name, string address) {
    order ord;
    ord.order_num = order_num;
    ord.user_name = user_name;
    ord.address = address;
    return ord;
}
int main() {
    //测试结构传递
    order o1 = { "020134242", "user_1", "chengDu" };
    print_order(o1);
    print_order(&o1);
    //测试返回结构
    order o2 = build_order("123", "wyl", "chengDu");
    print_order(o2);
    return 0;
}
### 函数指针的使用 在C语言中,函数指针是一种特殊的指针类型,它可以指向一个函数,并通过该指针调用相应的函数函数指针的一个典型应用场景是在需要将函数作为参数传递给其他函数的情况下,比如回调函数或者事件处理程序。下面是一个简单的例子,展示了如何定义使用函数指针: ```c #include <stdio.h> // 函数原型声明 int add(int a, int b); int subtract(int a, int b); // 定义一个函数指针类型 typedef int (*Operation)(int, int); int main() { // 使用函数指针类型声明变量并初始化 Operation op = add; // 通过函数指针调用函数 printf("Result of addition: %d\n", op(5, 3)); // 改变函数指针指向另一个函数 op = subtract; // 再次通过函数指针调用不同的函数 printf("Result of subtraction: %d\n", op(5, 3)); return 0; } // 函数定义 int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } ``` ### 结构体指针作为函数参数 当处理复杂的数据结构时,如结构体,通常推荐使用指针来传递结构体函数,这样可以避免复制整个结构体,提高效率。下面的例子展示了如何使用结构体指针作为函数参数: ```c #include <stdio.h> #include <string.h> // 定义一个结构体 typedef struct { char name[20]; int age; int id; } Student; // 函数声明,接受一个结构体指针作为参数 void printf_student(Student *s); int main() { // 创建一个结构体实例 Student student1; // 初始化结构体成员 strcpy(student1.name, "张三"); student1.age = 20; student1.id = 123456; // 调用函数,传入结构体指针 printf_student(&student1); return 0; } // 函数定义,使用结构体指针访问成员 void printf_student(Student *s) { // 使用->操作符访问结构体成员 printf("Name: %s, Age: %d, ID: %d\n", s->name, s->age, s->id); } ``` ### 结构体嵌套与指针 在C语言中,结构体可以包含其他结构体,形成嵌套结构。这种情况下,使用指针访问嵌套结构体的成员非常方便。以下示例展示了如何使用指针访问嵌套结构体的成员: ```c #include <stdio.h> #include <string.h> // 定义内部结构体 typedef struct { int year; int month; int day; } Age; // 定义外部结构体,包含内部结构体 typedef struct { char name[20]; // 姓名 Age birthday; // 生日 } Student; int main() { // 创建一个外部结构体变量 Student student1; // 创建一个指向外部结构体的指针 Student *point = &student1; // 初始化结构体成员 strcpy(point->name, "张三"); point->birthday.year = 1989; point->birthday.month = 4; point->birthday.day = 29; // 输出结构体成员 printf("Name: %s\n", point->name); printf("Birthday: %d-%d-%d\n", point->birthday.year, point->birthday.month, point->birthday.day); return 0; } ``` ### 结论 以上示例展示了C语言中指针在函数参数传递结构体中的基本使用方法。这些技术是编写高效、灵活程序的关键部分。通过使用函数指针,可以使程序更加模块化;而使用结构体指针,则可以在处理复杂数据结构时提高性能代码的可读性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值