當前位置: 華文星空 > 知識

C/C++ 裏指標聲明為什麽通常不寫成 int* ptr 而通常寫成 int *ptr ?

2016-11-05知識

我知道題主的問題是啥,不過似乎很多人都沒看懂題主想表達什麽。

題主想表達的意思是:

int * p =& a ;

* p =& a ;

具有完全不同的語意,前者先計算賦值再計算星號,後者則是先計算星號再計算賦值。語意與運算子優先級都不同,在可讀性方面存在很大影響。

因此,這顯然是 C/C++ 當初設計上的不足。

不過,為什麽會存在這個現象呢?

因為 C 語言當初設計的時候,是不建議在定義變量的時候賦值的

因為 C 語言當初並不是打算讓你在定義變量的時候同時賦值,所以 C 語言最初設計為只能在檔頭,函數頭,區塊頭定義變量。變量僅僅只是定義,而賦值則是發生在程式邏輯實際發生的時候。

但是隨著時代的發展,人們逐漸覺得在定義的時候賦值,將定義推遲到賦值的時候,才是更好的編程實踐,C++作者就非常推崇這個。而這個時候,為了相容 C ,已經沒法再解決這個問題了。

不過現在,問題得到了解決,那就是 C++11 引入的 auto 。

實際上前置類別語言的這類設定是:如果你需要賦初值,那麽就不要聲明類別,讓語言自動推導;如果你聲明類別,就不要賦初值,否則語意上容易沖突,影響可讀性。

如此一來,就不會存在題主曾經有的「初始化語句與賦值語句語意與運算子優先級不一致」的問題了。