指標變數為什麼加字首p

時間 2021-07-11 21:24:21

1樓:

這實際上是一種叫做匈牙利命名法的命名約定。估計是在最初自動完成和語義提示還不是很發達的年代,尤其是在一類對資料型別宣告不是很明確的程式語言中,人們為了1.通過變數的名稱約定/了解變數的型別,2.

區分不同型別的相同名稱的變數/識別符號,於是就提出了這種命名方法。例如,所有的 bool 型變數使用 b 打頭,所有的指標(pointer)使用 p 打頭,而 Win32 API 中的 lp 就是長指標了。32位系統中,所有的指標都是長指標,因此 Win32 API 中的指標引數名全部以 lp 打頭。

例如// WIN32API,用於建立位圖。

HBITMAP

CreateBitmap

(_In_

intnWidth

,_In_

intnHeight

,_In_

UINT

cPlanes

,_In_

UINT

cBitsPerPel

,_In_

const

VOID

*lpvBits

);// WIN32API,用於設定視窗樣式、子分類、或者設定視窗的其他可以表示為 LONG 的資料。

LONG

WINAPI

SetWindowLong

(_In_

HWND

hWnd

,_In_

intnIndex

,_In_

LONG

dwNewLong

);// MFC中用於表示時間長度的類。

CTimeSpan

然後我覺得 MFC 中約定所有的類使用 C 打頭也是一種類似的用法,例如 CWnd,CTimer,CString 之類的,以及幾乎所有語言中都約定介面名稱以 I 打頭。

以及,用過VB6及以前版本的同學們肯定見過這樣的內容

當然,現在 .NET 的命名約定中已經建議我們不要使用這種方法了。至少在一般的公共屬性/字段/型別名稱/引數名稱中如此(當然,介面還是要以 I 打頭),因為我們有強大的 Intellisense 工具,此時就無需讓一些特殊的表示方法使得識別符號變得十分複雜。

你可以觀察一下下面建構函式的引數命名方式和上面的 CTimeSpan 有何異同:

// .NET 中用於表示時間長度的結構體。

struct

TimeSpan

不要使用匈牙利表示法。

匈牙利表示法是在識別符號中使用乙個字首對引數的某些元資料進行編碼,如識別符號的資料型別

[c.f. 通用命名約定]

為什麼可以通過指標修改 const 變數?

這種問題可以自己除錯一下,看看反彙編 雖然無法得到 未定義行為 編譯檢查執行時檢查 這種高度概括的答案,但至少能讓你得到乙個直觀的認識。之後,你的問題不再是 為什麼是這個結果 而變成 編譯器為什麼這麼設計 進而很自然地了解到有些行為是未定義的等等等等。 時冰藍 指標還能改private呢,priva...

弱工具變數的判定指標都有什麼?

gnak 首先的首先的首先,在教科書上最簡單的法則就是用第一階段回歸中的F統計量 原假設為所有工具變數都為0 若F 10則可以認為不是弱工具變數 Stock Watson,introduction to econometrics,p444 如果你用stata的ivreg2或者ivreghdfe跑回歸...

你的郵箱字首是什麼?為什麼這樣設定?

陸子 請教一下。我想向mathfuns 計算器反饋一亇問題。該公可在反饋介面上名給出的是,郵箱mathfuns hotmail,我提交反饋後的反應是,這不是郵箱有效位址,該怎麼處理? llf0349 一般企業郵箱的字尾是企業網域名稱,這是統一的,不可更改的,但是字首是可以設定的,想要你的郵箱讓人眼前...