C语言中结构体给函数传参有两种方法:
1.值传递(修改形参不改变原值)
void fun(STUDENT student){……}
int main(){fun(student);
}
2.引用传递(传的是地址,修改形参会改变原值)
void fun(STUDENT * student){……}
int main(){fun(&student);
}
此外C++里还有一种引用传递的写法为:
void fun(STUDENT & student){……}
int main(){fun(student);
}
测试代码(为.cpp文件):
#include <stdio.h>
typedef struct {int price;
}CAR;
void change1(CAR car){car.price = 200;
}
void change2(CAR *car){car->price = 200;//修改的是引用的成员,故要用->
}
void change3(CAR &car){//第三种写法只能使用g++编译器进行编译car.price = 200;
}
int main(){CAR car = {130};change1(car);printf("change1函数修改价格:%d\n",car.price);change2(&car);printf("change2函数修改价格:%d\n",car.price); change3(car);printf("change3函数修改价格:%d\n",car.price); return 0;
}
运行结果:
注:点操作符(.)与箭头操作符(->):
都用于操作结构体的成员变量,区别在于:点操作符是对结构体本身进行操作,而箭头操作符是对结构体的引用进行操作。