-
你可以分配乙個值,但這個動作非常淫穢...... 呵呵。。。
1.如果 p 被分配了位址 a,則原來的位址 a 在分配後會變成乙個死位址,因為 p 被分配了,但 p 沒有被釋放,也沒有被使用,所以在給其他指標分配位址時不會使用 a,而 a 位址所指向的空間就變成了洩漏的空間並被掛起...... 如果這個程式迴圈執行,會導致記憶體耗盡,系統崩潰......
2.如果將位址 b 新分配給 p,則將來對 p 進行操作,則將對 b 指向的位址進行操作。 如果 b 是空白且未使用,則什麼都不是......
但是如果 B 儲存了重要資料,而你對 P 指向的內容做了乙個寫入操作,那麼 B 位址中的內容就會被修改,這將嚴重導致系統癱瘓......
因此,為指標賦值是乙個非常危險的操作,請小心!
-
你可以直接分配乙個值,只要你確切地知道他的位址是正確的。
-
您可以直接分配乙個值,但後果可能很嚴重。
#include
main()
int *p;
p=0x1245052;
printf("%d",p);
這是可能的。 但。
printf("%d",p);
成為。 printf("%d",*p);
可能會出現奇怪的錯誤。
-
用於安全訪問。
當我們定義乙個變數並訪問它時,例如 int a; a=10;編譯器幫助我們在記憶體中分配位址和空間(長度),在訪問(使用)時,我們只需要在原始碼中寫下它的名字,我們不需要關心具體位址是什麼,編譯器在編譯時會自動幫助我們轉換為目標**中的特定位址。
例如,當編譯器在為變數(物件)分配記憶體後確定具體位址為 1000 時,那麼當前命名空間中遇到的所有 a 都會自動轉換為 1000,並且對 a 的所有操作都會被位址 1000 上的操作所取代,並且由於變數型別在定義時已經確定, 編譯器也知道如何訪問位址,比如長度和資料編碼(int 是 4 個位元組,正數是原始程式碼,負數是補碼)。
了解了上述細節,直接使用位址(指標)操作資料比使用變數名更危險,因為它要求程式設計師非常清楚,他們在使用指標時所做的一切都必須是“完全正確的”,而在使用指標訪問時,編譯器將一些錯誤檢查工作留給程式設計師(這是指標便利性和效率的代價)。
因此,開發乙個初始化指標是乙個簡單而良好的安全習慣,在指標暫時沒有獲取到正確的位址之前,一定要先初始化null,而且在使用指標之前,還必須養成在訪問前判斷的習慣,比如if(p),不要怕麻煩的if型別。 而如果指標沒有賦值到正確的位址,指標變數中的位址是隨機的,可能是前乙個臨時變數或程式的殘餘,而這些值是不確定的,當這個值恰好是系統的敏感位址時,你的程式很可能會訪問錯誤的位址,而且在大多數情況下會導致程式崩潰甚至系統崩潰。
當你的程式大到足以達到一定大小時,如果指標訪問在某處出現錯誤,就很難找到錯誤,大到你也會崩潰。
-
新增 * 是為了澄清這是乙個指標變數,否則會混淆。
例如,定義乙個 int 變數是。
int a;
如果也定義指向 int 型別的指標。
int p;
那麼,如何判斷 p 是指向 int 而不是 int 的指標呢? 新增 * 來標識它(其實也可以設定為別的東西,比如 int 指標 p; 表示 p 是指向 int 型別的指標,但 point 的五個字母會比 * 更方便嗎? )
int *p;說明 p 是指向 int 型別的指標。
您可能會感到困惑,為什麼應該指定定義指向的指標型別,例如,並非所有指標都應以相同的方式定義。
pointer p;
這是因為指標不僅儲存位址,還儲存“如何讀取資料”的方法,否則讀取資料會不正確。 例如,如果我們在指標中儲存了乙個位址 28790,我們應該從 27890 開始讀取乙個位元組,還是四個位元組,還是八個位元組? 我們只知道位址的“起點”是27890,如果我們不知道這個指標指向的位址的“終點”在哪裡,我們就無法準確讀取資料。
如果我們給指標“它指向什麼型別”,那麼我們可以準確地讀取資料,例如 char *p; 假設儲存在 p 中的位址是 27890,那麼由於 p 是 char *,我們知道我們必須從 27890 中讀取乙個位元組,如果 p 是 int *,那麼我們將讀取四個位元組。
這就是為什麼指標的定義需要 * 符號的原因。
-
實際上,您正在問乙個關於左值和右值的問題。
賦值編號左側的變數稱為左值變數,賦值編號右側的變數稱為右值變數。
左值變數獲取其位址,右值變數獲取其值(內容)。
您可以將變數視為物件,任何變數都有 2 個屬性,乙個是位址,乙個是數值。 該位址對應於儲存數值(內容)的記憶體空間。
因此,C++ 在執行賦值語句時,首先取左值(左側變數的位址),然後取右值的值(右側變數的值),然後執行賦值操作,即右值儲存在左值中。
設定值的操作不會影響原始值。 所以答案 1 是 a 的位址,答案 2 仍然是 7
-
或 A 的位址。
A 的值為 7
-
雖然 B 是正確的答案,但對 CD 的理解是不正確的。
a、*p是帶有位址p的記憶體賦值,因為p還沒有賦值,這種行為很危險 b、陣列的第乙個位址可以理解為乙個常量指標(即指向乙個無法更改的位址的指標),雖然指標不能修改,但它指向的位址的內容是可以改變的。
是乙個常量,其位址無法修改。
d。錯誤在於引用 a 的初始化,它應該使用相同的型別 (int &a = b)。
其實完整的指標可以理解為乙個整數(對於常見的是乙個32位無符號整數),但是它的值有明確的含義(代表乙個記憶體空間),所以它的值不能任意(受可訪問位址範圍的限制),從這個角度來看,就很容易理解為什麼指標加法沒意義了(會超出訪問範圍), 而且區別是有意義的(兩個指標之間分隔了多少記憶體空間,但注意大位址以減少位址是有意義的)。
房東您好,交貨方式是什麼? 把它送給別人還是給自己? 如果是給別人的,你只是問乙個獎勵分數高的問題,然後題目就寫來送分,當有人來的時候,你就是別人了,但是這樣的問題肯定會被人舉報刷分,不可行,如果給自己,那就先問自己乙個高分的問題, 然後再用乙個,最後為答案,那就沒關係了,但這也是作弊,不可行。
相關性是指企業提供的會計資訊應與財務報表使用者的經濟決策需求相關,幫助財務報表使用者評估企業過去、現在或未來的狀況。 >>>More