結構體變量和結構體指針的區別
特性 | 結構體變量 | 結構體指針 |
---|---|---|
存儲內容 | 結構體的實際數據 | 內存地址 |
內存開銷 | 結構體總大小 | 固定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