宣告多個指標時,為什麼實際只有第乙個是指標?

時間 2021-05-06 15:56:34

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 你有一張名片,上面有你家位址。我想去你家送東西,你就把名片影印了一張給我,這時候上面的位址肯定是一樣的。我按照名片的位址去你家送了,你回家也可以看到變化。但是我在你給我的這張名片上把位址改成我家,不會影響到你手上的名片。其中我們兩個的名片上的位址是一樣的對應 兩者指向的位址相同 你...