如何理解c c 語言的宣告以及型別?

時間 2021-05-05 23:16:49

1樓:iCAPCOM

int * a可理解為 int* a,也可以理解成int *a,對編譯器來說沒有區別。都是說:a的資料型別是指向int型的指標,指標是一種變數(可理解這個指標a是乙個箭頭指向乙個變數所在的記憶體位址)。

int * * a表示指標a是乙個箭頭指向乙個變數所在的記憶體位址,這個位址儲存的變數也是乙個箭頭指向乙個變數所在的記憶體位址。

如果宣告中有()和[ ],只要知道()的優先順序高於[ ],從第乙個識別符號(從左往右看)開始,一層一層、成對地逐漸向外層解析()和[ ]。

2樓:楚狂

呵呵,比指標複雜20倍啊...

int a

中間加乙個*,指標

中間加兩個*,指標的指標

中間加三個*,指標的指標的指標

如果不談指標,你可以想成爸爸

int a的爸爸,

的爸爸的爸爸

的爸爸的爸爸的爸爸

如果還不行,我們上一首後現代兒歌(來自小蓓蕾組合)(白)爸爸好,媽媽好,爺爺好,奶奶好

爸爸的爸爸叫什麼

爸爸的爸爸叫爺爺

爸爸的媽媽叫什麼

爸爸的媽媽叫奶奶

媽媽的爸爸叫什麼

媽媽的爸爸叫外公

媽媽的媽媽叫什麼

媽媽的媽媽叫外婆

相逢開口笑,嘴巴甜又巧

叫得全家老少樂呀樂陶陶

見誰都要叫,千萬別叫錯

懂禮貌的孩子就是我就呀就是我

爸爸的兄弟叫什麼

爸爸的兄弟叫伯伯和叔叔

爸爸的姐妹叫什麼

爸爸的姐妹叫姑姑

媽媽的兄弟叫什麼

媽媽的兄弟叫舅舅

媽媽的姐妹叫什麼

媽媽的姐妹叫阿姨

相逢開口笑,嘴巴甜又巧

叫得全家老少樂呀樂陶陶

見誰都要叫,千萬別叫錯

懂禮貌的孩子就是我,就呀就是我

(白)外公好,外婆好,叔叔好,伯伯好

爸爸的爸爸叫什麼

爸爸的爸爸叫爺爺

爸爸的媽媽叫什麼

爸爸的媽媽叫奶奶

媽媽的爸爸叫什麼

媽媽的爸爸叫外公

媽媽的媽媽叫什麼

媽媽的媽媽叫外婆

相逢開口笑,嘴巴甜又巧

叫得全家老少樂呀樂陶陶

見誰都要叫,千萬別叫錯

懂禮貌的孩子就是我,就呀就是我

標準有向無環圖,二叉樹不行

3樓:

為實物取外號

這可是門技術活, 要考慮怎麼把外號取得好聽(是否好記憶->好區分)!

取得響亮(能傳播多遠)!

還要讓人能快速通過外號找到實物(別太作,取超多的外號,還外號的外號...把人繞暈了)!

4樓:周成

沒錯int*就是乙個型別,至於為什麼要有int*這樣的型別原因很簡單,這門語言就是需要這麼一種型別才能完成一些事情,而int做不到。

int*和int的區別在於,int就是乙個int,只要關心它的值就可以了,而int*除了本身值有意義之外,還可以進行一次解引用

int a = 1;

int *pa = &a;

這個例子中,a的值是1這是我們關心的,而a的位址(假設是0x12345678)是我們不需要關心的。

pa的位址(假設是0x87654321)我們不需要關心,而它的值是0x12345678就是有意義的,另外pa還可以解引用一次,*pa的結果是1

所以int*是乙個型別,並且這個型別是C語言必須要的

多維指標理解也簡單,每加乙個*,就可以多解引用一次

同理int&是C++語言必須要的一種型別,理由類似

所以題主第二個問題中的說法是不對的,b是int&型別,而不是int型別。如果b是int,那它就做不到引用的功能了。

int *p[5]

就是指標的陣列,這個陣列中有5個int*,分別用p[0],p[1],p[2],p[3],p[4]訪問

int (*p[5])()

這是函式指標陣列,請看栗子

int fun1()

int fun2()

int fun3()

int fun4()

int fun5()

int _tmain(int argc, _TCHAR* argvint(*p[5p[0] = fun1;

p[1] = fun2;

p[2] = fun4;

p[3] = fun4;

p[4] = fun5;

printf("%d\n", p[0printf("%d\n", p[1printf("%d\n", p[2printf("%d\n", p[3printf("%d\n", p[4getchar();

return 0;}

5樓:invalid s

很簡單,從被宣告的識別符號開始,先右後左,遇括號返回。

int A;

很簡單,A是乙個int

int *A;

從A開始:A是乙個變數,*表示它是乙個指標變數,int表示這個指標變數指向int

int **A;

A是乙個變數,*表示它是乙個指標變數,第二個*表示前乙個指標變數指向的型別還是乙個指標,int表示A這個指標變數指向的指標變數指向乙個int

int A[5];

A是乙個變數,(向右)這個變數是乙個有5個元素的陣列,(向左)這個陣列儲存int

int *A[5];

A是乙個變數,(向右)這個變數是乙個有5個元素的陣列,(向左)這個陣列儲存指標,指標指向的型別是int

int **A[5];

A是乙個變數,(向右)這個變數是乙個有5個元素的陣列,(向左)這個陣列儲存指標,指標指向的型別還是乙個指標,最終指向的資料型別是int

當然還有很多更為複雜、連老鳥都能搞暈的寫法。那些就屬於魔道了。

真需要作複雜的宣告時,建議用typedef一層層定義別名、最後用typedef的別名完成宣告。這樣寫出的宣告易懂、無歧義、便於閱讀。

C語言複雜宣告解析

怎麼理解C語言的複雜宣告?

char X X是乙個函式,返回值是乙個指標,該指標指向乙個陣列,陣列裡的元素是函式指標,這些函式指標所指向的函式的返回值是char型別。char X 3 5 X是乙個3個元素的陣列,陣列裡的元素是函式指標,這些函式指標所指向的函式的返回值也是指標,該指標指向乙個有5個char型別元素的陣列。 Be...

如何理解 C 中 int i 的宣告方式?

我的偏好,當定義指標型別物件的時候,比如你的例子,我寫成int a,理由,為了統一,好記,int 是型別名,a是變數名.指標是復合型別,不同型別復合出的指標型別型別不同。 Shark 個人偏好把int 看做乙個整體,把i作為變數,實際上這也符合從右向左看的原則。至於int i的寫法,我認為可以理解為...

計算機專業的大佬是如何上類似c c語言python之類的專業課的

sjinny sun 除了看書和上機實踐之外,還有乙個辦法 先在紙上程式設計,然後在自己腦子裡想象執行過程並且除錯解決bug,最後上機。目標就是在腦子裡把問題都解決掉,上機時編譯執行一次性通過。 山貓喵喵喵 免修。我的C C 老師講課很無聊,聽課十分鐘就能入睡,老師自己都快講得睡著了。在 睡 完一學...