问题:C 语言结构体类型参数 与 结构体指针类型参数 的区别

  • 结构体类型 参数传递的是结构中所有成员的副本。
  • 结构体指针类型 参数传递的是指向原结构体的指针。

  1. 代码
/* test3.c */
#include <stdio.h>

struct data {
    int i;
    char *msg;
};

void changeData1(struct data d); 	// 结构体类型参数
void changeData2(struct data *d);	// 结构体指针类型参数

void main(){
    struct data d;
    d.i = 0;
    d.msg = "0000000";
    printf("init0, i:%d, msg:%s\n", d.i, d.msg);
    //
    changeData1(d);
    printf("change1, i:%d, msg:%s\n", d.i, d.msg);
    //
    changeData2(&d);
    printf("change2, i:%d, msg:%s\n", d.i, d.msg);
}

void changeData1(struct data d){
    d.i = 1;
    d.msg = "111111111";
}

void changeData2(struct data *d){
    d -> i = 2;
    d -> msg = "22222222222";
}

运行结果:

ubuntu@cuname:~/dev/beginning-linux-programming/test$ gcc -o test3 test3.c
ubuntu@cuname:~/dev/beginning-linux-programming/test$ ./test3
init0, i:0, msg:0000000			// 初始值
change1, i:0, msg:0000000 		// 结构体类型参数 更改失败	
change2, i:2, msg:22222222222	// 结构体指针类型 修改成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值