You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构体指针传递、函数内值递增及自动编号实现问题

C语言结构体相关问题解答

1. 被调用函数中递增变量的值

要在被调用函数里修改并递增主调函数的变量,必须传递变量的指针。因为C语言是值传递,直接传变量会生成副本,修改副本不会影响原变量。

示例代码:

#include <stdio.h>

void increment(int *num) {
    // 解引用指针,操作原变量内存地址的值
    (*num)++;
}

int main() {
    int count = 0;
    increment(&count); // 传递变量的地址
    printf("递增后count的值:%d\n", count); // 输出1
    return 0;
}

核心:用*解引用指针访问原变量,传参时用&取变量地址。

2. 结构体指针传递给函数

先声明结构体类型,定义结构体指针后,将指针(或结构体的地址)传给函数,函数内用->运算符访问结构体成员。

示例代码:

#include <stdio.h>
#include <string.h>

// 声明customer结构体
typedef struct {
    char name[50];
    int number;
} customer;

// 接收结构体指针的函数:打印客户信息
void print_customer(customer *pcust) {
    printf("编号:%d,姓名:%s\n", pcust->number, pcust->name);
}

int main() {
    customer cust;
    customer *pcust = &cust; // 让指针指向结构体变量的地址

    // 用指针给成员赋值
    strcpy(pcust->name, "Alice");
    pcust->number = 1;

    // 传递结构体指针给函数
    print_customer(pcust);

    // 你提到的pcust->number++直接使用即可,前提是指针已指向有效结构体
    pcust->number++;
    print_customer(pcust); // 此时number为2
    return 0;
}

核心:结构体指针访问成员用->,普通结构体变量用.;传递指针时要确保其指向已分配内存的结构体(栈变量或堆内存)。

3. 自动分配连续编号并全局可用

用静态全局变量存储当前最大编号,它会保留上次的值,且仅在当前文件可见,不会污染全局命名空间。每次创建新结构体时,递增该变量并赋值给结构体的number字段。

示例代码:

#include <stdio.h>
#include <string.h>

typedef struct {
    char name[50];
    int number;
} customer;

// 静态全局变量:记录当前编号,初始为0,仅当前文件可访问
static int current_id = 0;

// 输入客户信息并自动分配编号
void input_customer(customer *pcust) {
    printf("请输入客户姓名:");
    scanf("%s", pcust->name);
    // 自动分配下一个连续编号
    current_id++;
    pcust->number = current_id;
}

// 打印客户信息
void print_customer(customer *pcust) {
    printf("%d %s\n", pcust->number, pcust->name);
}

int main() {
    customer custs[3]; // 存储3个客户信息

    // 输入3个客户
    for (int i = 0; i < 3; i++) {
        input_customer(&custs[i]);
    }

    // 打印所有客户
    printf("\n客户列表:\n");
    for (int i = 0; i < 3; i++) {
        print_customer(&custs[i]);
    }

    return 0;
}

运行效果:

请输入客户姓名:customer1
请输入客户姓名:customer2
请输入客户姓名:customer3

客户列表:
1 customer1
2 customer2
3 customer3

核心:静态全局变量current_id在程序运行期间持续保留值,每次调用input_customer自动递增,实现连续编号;若需跨文件访问,可去掉static改为全局变量,或封装获取编号的函数。

内容的提问来源于stack exchange,提问作者gwen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:45:58