数据结构(Data structures)(二):结构体指针
?
Pointers to structures
像其它數(shù)據(jù)類型一樣,結(jié)構(gòu)體也可以有指針。可以被它自己的類型的指針?biāo)赶?。其?guī)則同其它基本數(shù)據(jù)類型一樣:
?
struct movies_t{
string title;
int year;
};
movies_t amovie;
movies_t* pmovie;
?
這里 amovie 是一個(gè)結(jié)構(gòu)體 movies_t 的對(duì)象,而pmovie 是一個(gè)指向結(jié)構(gòu)體movies_t 的對(duì)象的指針。所以,同基本數(shù)據(jù)類型一樣,以下表達(dá)式也是正確的:
?
pmovie = &amovie;
?
現(xiàn)在,讓我們看一個(gè)包含有指針和結(jié)構(gòu)體的例子,這里我們將引入一個(gè)新的操作符——箭頭操作符(->):
?
| #include <iostream> #include <string> #include <sstream> using namespace std; struct movies_t {string title;int year; }; int main () {string mystr;movies_t amovie;movies_t * pmovie;pmovie = &amovie;cout << "Enter title: ";getline (cin, pmovie->title);cout << "Enter year: ";getline (cin, mystr);(stringstream) mystr >> pmovie->year;cout << "\nYou have entered:\n";cout << pmovie->title;cout << " (" << pmovie->year << ")\n";return 0; } | Enter title: Invasion of the body snatchers Enter year: 1978You have entered: Invasion of the body snatchers (1978) |
?
上面的代碼中引入了一個(gè)重要的操作符:->。這是一個(gè)間接引用操作符,常與結(jié)構(gòu)體或類的指針一起使用,以便引用其中的成員元素,例如:
?
pmovie -> title;
與語(yǔ)句:
(*pmovie).title;
是等價(jià)的。
?
以上兩種表達(dá)式 pmovie ->title 和 (*pmovie).title 都是合法的,都表示取指針pmovie 所指向的結(jié)構(gòu)其元素title 的值。我們要清楚將它和以下表達(dá)區(qū)分開(kāi):
*pmovie.title;
它等價(jià)于:
*(pmovie.title);
表示取結(jié)構(gòu)pmovie 的元素title 作為指針?biāo)赶虻闹?#xff0c;這個(gè)表達(dá)式在本例中沒(méi)有意義,因?yàn)閠itle本身不是指針類型。
下表中總結(jié)了指針和結(jié)構(gòu)組成的各種可能的組合:
?
| 表達(dá)式 | 描述 | 等價(jià)于 |
| pmovie.title | 結(jié)構(gòu)體pmovie 的元素title | ? |
| pmovie->title | 指針pmovie 所指向的結(jié)構(gòu)體其元素title 的值 | (*pmovie).title |
| *pmovie.title | 結(jié)構(gòu)體pmovie 的元素title 作為指針?biāo)赶虻闹?/span> | *(pmovie.title) |
轉(zhuǎn)載于:https://www.cnblogs.com/guozqzzu/p/3625577.html
總結(jié)
以上是生活随笔為你收集整理的数据结构(Data structures)(二):结构体指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: EBS模块介绍和概念解释
- 下一篇: 判断线段相交 + vector. era