结构体参数

结构体作为函数参数:

复制代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct student
{
    char name[10];
    int age;
};

void print_student(struct student s)
{
    printf("name = %s,age = %d\n",s.name,s.age);
}    

void set_student(struct student *s,char *name,int age)
{
    strcpy(s->name,name);
    s->age = age;
}

int main()
{
    struct student st = {"tom",20};
    set_student(&st,"mike",100);
    print_student(st);
    return 0;
}
复制代码

结构体作为函数参数时,实参传入地址,形参用指针接收。

 

运行结果;

exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct2

name = mike,age = 100

 

如果函数参数的结构特别大,比如name[10000],会导致入栈速度变得很大,栈的内存变得很大,程序运行效率很低,所以一般来说不要把结构变量作为函数参数传递。

复制代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct student
{
    char name[10];
    int age;
};

void print_student(const struct student *s)
{
    printf("name = %s,age = %d\n",s->name,s->age);
}    

void set_student(struct student *s,char *name,int age)
{
    strcpy(s->name,name);
    s->age = age;
}

int main()
{
    struct student st = {"tom",20};
    set_student(&st,"mike",100);
    print_student(&st);
    return 0;
}
复制代码

运行结果:exbot@ubuntu:~/wangqinghe/C/20190714$ gcc struct2.c -o struct2

exbot@ubuntu:~/wangqinghe/C/20190714$ ./struct2

name = mike,age = 100

 

结论:在定义一个和结构体有关的函数时,尽量使用指针,而不是使用结构变量。因为使用指针,只需要传递地址大小的数据。

posted @   王清河  阅读(914)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2018-07-14 1066 Root of AVL Tree (25)
点击右上角即可分享
微信分享提示