结构体变量和结构体指针的区别
特性 | 结构体变量 | 结构体指针 |
---|---|---|
存储内容 | 结构体的实际数据 | 内存地址 |
内存开销 | 结构体总大小 | 固定4/8字节(指针大小) |
成员访问运算符 | . | -> |
函数传参时的行为 | 值拷贝(新副本) | 地址传递(操作原数据) |
修改效果 | 不影响原结构体 | 直接影响原结构体 |
结构体指针作为函数参数的优势与注意事项
-
当需要跨函数修改原结构体或结构体较大时,应使用指针传递。
-
结构体指针通过内存地址直接操作原始数据,效率更高。
-
指针访问成员时必须确保指针已正确初始化(指向有效内存)。
示例
- 代码
#include <iostream> #include <string> using namespace std;struct Book{string title;double price;int value; };int main(){Book a = {"三国演义",39.99,100};Book b = a;cout << a.title << ' ' << a.price << ' ' << a.value << endl;cout << b.title << ' ' << b.price << ' ' << b.value << endl; cout << endl;b.title = "水浒传";cout << a.title << ' ' << a.price << ' ' << a.value << endl;cout << b.title << ' ' << b.price << ' ' << b.value << endl; cout << endl;Book* p = &a;p->title = "红楼梦";cout << a.title << ' ' << a.price << ' ' << a.value << endl;cout << b.title << ' ' << b.price << ' ' << b.value << endl; cout << p->title << ' ' << p->price << ' ' << p->value << endl;return 0; }
- 运行
三国演义 39.99 100 三国演义 39.99 100三国演义 39.99 100 水浒传 39.99 100红楼梦 39.99 100 水浒传 39.99 100 红楼梦 39.99 100