1樓:sin1080
建議按照SB哦不是BS老爺爺的建議,使用int* p這種寫法,並且每行只宣告乙個變數。指標和引用在C++裡明顯在各個地方都被作為型別系統的一部分,只有這裡一股濃濃的老C味道,我們只能自己避免踩坑。
遺憾的是,為了保持C++「抓來乙個C庫直接就用」的能力,C++並不能甩掉這個歷史包袱。只能忍了。
2樓:orwell1984
可以靠如下思路記憶:
應該這麼讀,int (*a),也就是*a是int型別的變數。既然對a解引用後是int型別,那a就是乙個指向int型別的指標。
指標裡放的是位址,只要你在一番推理後發現他沒有存放位址,就得檢查一下了。
3樓:大妖精
這是個從裡到外解方程的過程
int *a, b裡a經過dereference操作後得到type specifier的int,所以a是int的指標型別,這裡的*a叫declarator,而int才是公用的type specifier
4樓:Xi Yang
因為當年工程經驗不發達,那幫人感覺應當設計成:
int *a,讓*a的行為是int。
以便讓人更理解指標。而不設計成:
int* a,讓a是int的指標。
但顯然,後一種才既貼近真實情況,也符合現在人的通常期望。當年的設計純屬於圖樣圖森破。
5樓:王贇 Maigo
這是 C 語言語法的 bug。
int* p1, p2 其實會被理解成 int *p1, p2,即「*p1」和「p2」都是 int,於是只有 p1 是 int 指標,p2 就是乙個 int。
這種理解方法有一定道理,但很不幸跟正常人的理解方式不一樣。
6樓:zpan
題主,告訴你乙個好記的方法,每當你要宣告乙個指標時:
int *a;
你只需要看右邊,*a 一定是乙個 int 型別。
int (*a)(int);
你把 (*a) 看做乙個整體,就知道,(*a) 一定是乙個返回 int,接受乙個 int 引數的函式,所以 a 是函式指標。
int *a[5];
*a[i] 是 int,所以 a[i] 一定是 int*,所以 a 是乙個陣列,陣列裡的每乙個元素都是 int*。
int (*a)[5];
(*a)[i] 是 int,所以 (*a) 是乙個 int 陣列,a 是指向陣列的指標。
int (*a[5])(int);
(*a[i]) 是乙個返回 int,接受乙個 int 引數的函式,所以 a[i] 是乙個函式指標,所以 a 是函式指標的陣列。
7樓:nipan
因為指標具有右結合性。
舉個例子:
const char * p;
char const * p;
char * const p;
弄明白這三個就不會犯錯了。
8樓:
因為 int *p1, p2; 等價於 int *p1; int p2;
原因就是:語法就是這麼規定的。
在自己或讀者會混淆的情況下,不要寫這種程式碼。
就算不會混淆的情況下,也不要寫這種程式碼。
建議每行宣告的變數都是一樣型別的:
int v1, v2;
int *p1, *p2;
C C 裡指標宣告為什麼通常不寫成 int ptr 而通常寫成 int ptr
抱著結他去麗江 這個我剛開始學也是這樣困惑,後來忘了是在c primer還是c 之父寫的那本書裡找到了原因。int p旨在強調p所指向的是乙個int型別。像int這種型別為built in type.具體翻書去。而且看了好多比較有名的書,都是這樣寫的。 Noah 在 C Primer 這本書中明確指...
為什麼C語言用int a 來宣告指標變數,而不是int a宣告?
int a b 等同於 int a a b 也就是說 a型別是int,反推出a是指標 位址 a的值為b的位址。 Mandy 這是因為在型別描述和表示式中 的意義是不同的。型別描述中int 表示a的型別是整數的指標。而表示式中 是乙個運算子,表示對指標取值。 千景 int a 有兩種解釋 1.int ...
指標做形參時,指標指向的值已經被拷貝,為什麼位址還能相同?
bluebear 你有一張名片,上面有你家位址。我想去你家送東西,你就把名片影印了一張給我,這時候上面的位址肯定是一樣的。我按照名片的位址去你家送了,你回家也可以看到變化。但是我在你給我的這張名片上把位址改成我家,不會影響到你手上的名片。其中我們兩個的名片上的位址是一樣的對應 兩者指向的位址相同 你...