C语言中结构体整数与double类型成员的赋值替代方案
直接用赋值运算符
=就行! 你完全不用找什么intcpy或者doublecpy——C语言里对于整数、double这类基本数据类型,直接用普通的赋值运算符=就能完成成员赋值,根本不需要专门的拷贝函数。
为什么字符串需要strcpy,而基本类型不用?
原因很简单:C语言里的字符串通常是用字符数组存储的,数组名本质是一个指向首元素的指针,如果你直接写s[i].orderName = Name,其实是把Name数组的地址赋值给了orderName,而不是复制数组里的字符内容,这才需要strcpy来逐个复制字符。
但整数、double这类基本类型不一样,它们的值是直接存储在变量里的,用=就能直接完成值的拷贝,完全不会有问题。
举个具体的例子
假设你的结构体定义是这样的:
#include <string.h> // 要包含strcpy所需的头文件 typedef struct { char orderName[64]; // 字符串成员 int orderNumber; // 整数成员 double totalPrice; // double成员 } Order;
那赋值的时候可以这么写:
Order s[10]; // 结构体数组 char Name[] = "Apple Pie"; int num = 123; double price = 19.99; int i = 0; // 字符串用strcpy赋值 strcpy(s[i].orderName, Name); // 整数直接赋值 s[i].orderNumber = num; // double直接赋值 s[i].totalPrice = price;
这样每个成员的赋值就都符合预期了。
另外补充个小技巧:如果要把一个结构体的所有成员直接拷贝给另一个同类型结构体,也可以直接用=,比如:
Order anotherOrder = s[i];
这会自动把s[i]的所有成员(包括字符数组里的每个字符)都拷贝到anotherOrder里,非常方便。
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

