1. 程式人生 > 其它 >C++之結構體指標

C++之結構體指標

結構體指標記得初始化,一定要初始化

int main() {
std::cout << "Hello, World!" <<"\n"<< std::endl;
struct Glass glass;
getNumber(&glass);
std::cout << "name=" <<glass.name<<",id="<<glass.id<< std::endl;
return 0;
}
void getNumber(void * temp){
struct Glass *glass2 = new Glass(); //任何指標使用之前一定要初始化
glass2->name ="cccc";
glass2->id=1;
//temp = glass2;//這種方式是無效的
memcpy(temp,glass2,sizeof(Glass));
}


1、結構體和結構體變數是兩個不同的概念:結構體是一種資料型別,是一種建立變數的模板,編譯器不會為它分配記憶體空間,就像 int、float、char 這些關鍵字本身不佔用記憶體一樣;結構體變數才包含實實在在的資料,才需要記憶體來儲存。
2、結構體變數名代表的是整個集合本身,作為函式引數時傳遞的整個集合,也就是所有成員,而不是像陣列一樣被編譯器轉換成一個指標。如果結構體成員較多,尤其是成員為陣列時,傳送的時間和空間開銷會很大,影響程式的執行效率。
所以最好的辦法就是使用結構體指標,這時由實參傳向形參的只是一個地址,非常快速。
3、此外為了使用的方便和直觀,用指標引用結構體變數成員的方式:

(*指標變數名).成員名

可以直接用:

指標變數名->成員名

來代替,它們是等價的。“->”是“指向結構體成員運算子”,它的優先順序同結構體成員運算子“.”一樣高。p->num 的含義是:指標變數 p 所指向的結構體變數中的 num 成員。p->num 最終代表的就是 num 這個成員中的內容。

綜上所述,以下 3 種形式是等價的:
  • 結構體變數.成員名。
  • (*指標變數).成員名。
  • 指標變數->成員名。