學習指標不可少的好文章 ( 六 )

2021-04-18 17:06:29 字數 992 閱讀 2424

指標和結構型別的關係

可以宣告乙個指向結構型別物件的指標。 例十一: struct mystruct mystruct ss=;//宣告了結構物件ss,並把ss的三個成員初始 化為20,30和40。 mystruct *ptr=&ss;//宣告了乙個指向結構物件ss的指標。它的型別是 mystruct*,它指向的型別是mystruct。 int *pstr=(int*)&ss;//宣告了乙個指向結構物件ss的指標。但是它的 型別和它指向的型別和ptr是不同的。

請問怎樣通過指標ptr來訪問ss的三個成員變數? 答案: ptr->a; ptr->b; ptr->c; 又請問怎樣通過指標pstr來訪問ss的三個成員變數? 答案: *pstr;//訪問了ss的成員a。 *(pstr+1);//訪問了ss的成員b。 *(pstr+2)//訪問了ss的成員c。 呵呵,雖然我在我的msvc++6.0上調式過上述**,但是要知道,這樣使用p str來訪問結構成員是不正規的,為了說明為什麼不正規,讓我們看看怎樣通過指 針來訪問陣列的各個單元: 例十二: int array[3]=; int *pa=array; 通過指標pa訪問陣列array的三個單元的方法是: *pa;//訪問了第0號單元 *(pa+1);//訪問了第1號單元 *(pa+2);//訪問了第2號單元 從格式上看倒是與通過指標訪問結構成員的不正規方法的格式一樣。 所有的c/c++編譯器在排列陣列的單元時,總是把各個陣列單元存放在連續的儲存區里,單元和單元之間沒有空隙。但在存放結構物件的各個成員時,在某種編譯環境下,可能會需要字對齊或雙字對齊或者是別的什麼對齊,需要在相鄰兩個成員之間加若干?quot;填充位元組",這就導致各個成員之間可能會有若干個位元組的空隙。 所以,在例十二中,即使*pstr訪問到了結構物件ss的第乙個成員變數a,也不能保證*(pstr+1)就一定能訪問到結構成員b。因為成員a和成員b之間可能會有若干填充位元組,說不定*(pstr+1)就正好訪問到了這些填充位元組呢。這也證明了指標的靈活性。要是你的目的就是想看看各個結構成員之間到底有沒有填充位元組, 嘿,這倒是個不錯的方法。 通過指標訪問結構成員的正確方法應該是象例十二中使用指標ptr的方法。

學習指標不可少的好文章 ( 八 )

指標型別轉換 當我們初始化乙個指標或給乙個指標賦值時,賦值號的左邊是乙個指標,賦值號的右邊是乙個指標表示式。在我們前面所舉的例子中,絕大多數情況下,指標的型別和指標表示式的型別是一樣的,指標所指向的型別和指標表示式所指向的型別是一樣的。例十四 1。float f 12.3 2。float fptr ...

讀到的好文章

呂氏春秋 中有這麼乙個故事 說是越王有四個兒子,有奸臣說你的大兒子要造反,越王就殺了大兒子 一段時間後奸臣有說你的二兒子要造反,二兒子也被宰了 奸臣就是奸臣,再度上奏說三兒子也要造反,造反當然立斬不赦。但是四兒子現在可不是這麼想的,心想我三個哥哥,奸臣一上奏就被砍頭了,我說不定哪天突然就被宰了,還不...

收藏的好文章

二叉樹遍歷之非遞迴演算法 石鍋拌飯的部落格 二叉樹遍歷的遞迴演算法 石鍋拌飯的部落格 二叉樹的遞迴建立 binary trees stanford cs education library binary trees pdf stanford cs education library 為什麼gets ...