C語言中.與->的區(qū)別詳細(xì)解析
->前是指針,而 . 前是結(jié)構(gòu)體變量
首先 a->b
的含義是 (*a).b
,所以他們是不同的,不過的確 ->
可以用 *
和 .
實現(xiàn),不需要單獨一個運算符。 嗯,我這是說現(xiàn)代的標(biāo)準(zhǔn)化的 C 語義上來說, ->
可以用 *
和 .
的組合實現(xiàn)。
早期的 C 有一段時間的語義和現(xiàn)代的 C 的語義不太一樣。
稍微有點匯編的基礎(chǔ)的同學(xué)可能知道,在機器碼和匯編的角度來看,不存在變量,不存在 struct 這種東西,只存在寄存器和一個叫做內(nèi)存的大數(shù)組。
結(jié)構(gòu)體變量用 . 來訪問結(jié)構(gòu)體的成員如下:
#include<stdio.h> #include <malloc.h> struct stu{ int age; stu* next; }; int main(){ stu s1; s1.age =18; return 0; }
指向結(jié)構(gòu)體的指針用->來訪問其指向的結(jié)構(gòu)體的成員如:
#include<stdio.h> #include <malloc.h> struct stu{ int age; stu* next; }; int main(){ stu *phead = (stu*)malloc(sizeof(stu));//測試代碼 phead->age=18; phead->next = NULL; stu* p = phead; return 0; }
簡單點說就是:
1、A->a表示A是指向結(jié)構(gòu)體的指針
2、A.a表示A是結(jié)構(gòu)體
3、A->a等效于(*A).a
4、A.B則A為對象或者結(jié)構(gòu)體;
5、A->B則A為指針,->是成員提取,A->B是提取A中的成員B,A只能是指向類、結(jié)構(gòu)、聯(lián)合的指針;
6、(*a).b 等價于 a->b。"."一般情況下讀作"的”; “->”一般讀作"指向的結(jié)構(gòu)體的"。也就是說在結(jié)構(gòu)中,運算符->是運算符*和運算符.的結(jié)合
7、“->”是指向結(jié)構(gòu)體成員運算符。“.”是斷點符號,不屬于運算符。
8、“->”所指向的是結(jié)構(gòu)體或?qū)ο蟮氖椎刂贰?ldquo;.”所指向的是結(jié)構(gòu)體或?qū)ο蟆?/strong>
9、“->”的用處是使用一個指向以便訪問結(jié)構(gòu)體或?qū)ο笃鋬?nèi)成員。“.”的用處是使用一個指向以便訪問結(jié)構(gòu)體或?qū)ο蟆?/strong>
此外,(*a).b 等價于 a->b。
"."一般情況下讀作"的”。
“->”一般讀作"指向的結(jié)構(gòu)體的"。
總結(jié)
到此這篇關(guān)于C語言中.與->區(qū)別的文章就介紹到這了,更多相關(guān)C語言.與->的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用rapidjson實現(xiàn)解析嵌套的json的方法示例
今天小編就為大家分享一篇關(guān)于利用rapidjson實現(xiàn)解析嵌套的json的方法示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04