c语言结构体函数是什么意思,C语言基础:C语言结构体(6) - 结构体与函数

这篇博客探讨了C语言中结构体与函数的交互,通过实例解释了如何使用指针传递结构体。文章详细分析了在函数内部修改结构体值的不同方式以及它们对原始结构体的影响,展示了结构体副本和指针解引用的差异,帮助读者理解内存地址和值传递的概念。
摘要由CSDN通过智能技术生成

上一节课, 我们讲解了指向结构体的指针, 这次我们来讲讲, 结构体与函数~~

下面我们来看一个小例子:

#include

struct Student

{

int age;

char *name;

};

void test(struct Student s)

{

s.age = 30;

s.name = "呵呵";

printf("age = %d name = %s\n", s.age, s.name);

}

int main()

{

struct Student stu = {28, "小明"};

test(stu);

printf("age = %d name = %s\n", stu.age, stu.name);

return 0;

}

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

有些人会有疑问, 我不是在调用函数的时候改了里面的值吗? 为什么输出的结果会不同呢??

其实原因很简单, 让我们来看看示意图:

0818b9ca8b590ca3270a3433284dd417.png

首先, 两个结构体的地址是不相同, 所以改了里面的值, 外面的结构体并不会改变, 而代码里面的调用, 只是简简单单的把一个结构体成员的值对应赋值给另一个结构体成员而已, 所以输出的结果并不会相同, 同样, 下面这个例子也是一样, 让我们来看看:

#include

struct Student

{

int age;

char *name;

};

void test(struct Student *p)

{

struct Student stu2 = {15, "小李"};

p = &stu2;

p->age = 25;

p->name = "小黑";

printf("age = %d name = %s\n", stu2.age, stu2.name);

}

int main()

{

struct Student stu = {28, "小明"};

test(&stu);

printf("age = %d name = %s\n", stu.age, stu.name);

return 0;

}

输出的结果:

0818b9ca8b590ca3270a3433284dd417.png

让我们来看看示意图, 为什么输出的结果不一样:

0818b9ca8b590ca3270a3433284dd417.png

一开始, 在main函数里, 传入进去的的确是stu的地址, 但是进到去test函数之后, p指针又指向了stu2的地址, 所以存的地址是sut2的, 而后面所改的值也是stu2的值, 所以stu输出的结果和原来的值一样, 而stu2输出的结果和原来的值不同.

还有另外一种使用方法, 我们来看看例子:

#include

struct Student

{

int age;

char *name;

};

void test(struct Student *p)

{

p->age = 30;

p->name = "李四";

printf("p = %d p = %s\n", p->age, p->name);

}

int main()

{

struct Student stu = {28, "小明"};

test(&stu);

printf("age = %d name = %s\n", stu.age, stu.name);

return 0;

}

输出的结果:

0818b9ca8b590ca3270a3433284dd417.png

好了, 这次我们就讲到这里, 下次我们继续~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值