1樓:
我來說明一下吧
讓我們先來格式化一下你的**:
1、 char *p1;
2、 int *p2;
3、 double x,*p3=&x;
4、 *p2=24680;
5、 p2=p3;
6、 p3=p1;
7、 p1=&x;
按照順序,我分成了7行,每一行我都標上了標號,一下用標號代表每一個程式行。
行1,宣告一個字元指標,p1
行2,宣告一個整數指標,p2
系統在執行時 ,在記憶體空間中,開出一塊空間,用來存放 p1 , p2 指向記憶體的地址,該空間的大小是能儲存地址大小的空間,這個大小隨作業系統以及編譯模式的變化而變化的,由於是存放地址,所以兩個所用的大小是一樣的,記住不是用來存放字元及整數值的儲存空間,具體存放字元及整數值的儲存空間在**,不知道。而這兩個存放地址的空間裡面的內容是什麼,也不知道,並且,系統不對其進行預設值的初始化,裡面的數值是隨機的。
行3,宣告一個double 型別的一個變數x,一個指標p3,並且 p3指向x,也即p3的存放地址的空間裡的資料是x的記憶體地址。
行4,*p2=24680 , 對p2所指向的地址賦一個整數值,由於p2還沒有進行設定存放數值的位置,因此,只能對p2裡面的隨機數值所指向的地址進行賦值,這樣是有問題的。
行5,p2=p3;由於p2和p3 是指標,因此p3的地址賦給p2,正與樓上說的,從地址角度講是對的,從指標所指向的資料型別講是錯的。
行6,p3=p1,同上,只是p1本身還沒有賦值,又如何能給p3賦值。
行7,p1=&x;同樣是對地址進行賦值, 但又涉及到指標所指的資料型別問題,如果後面的程式行,強行進行操作,肯定會出問題。
結論:c++指標的應用是c++中最為關鍵也最好用的,好多人認為很困難,其實在過來人看,也不是那麼困難,只不過當時在理解上有點差錯。
任何程式語言,都要求同一資料型別的資料進行運算,如果不同要進行轉換,其實指標也是一樣,我們應用指標最終是引用它指向的資料,要對資料進行運算,指標地址的操作也是為資料運算打基礎,在一般情況下,在進行指標地址操作時,也需確認地址所指向空間的資料型別,只要是型別相同,操作就不會出現問題。
還用一個最重要的,宣告指標後,在應用指標進行運算元據前,一定要將指標指向相應的地址空間。
宣告指標 --- 》 指標指向相應的地址空間 --》 指標參與資料運算
不寫了,寫得夠多了!
2樓:匿名使用者
1, 有錯,不能給非法記憶體賦值,此時p2不知道指向那塊記憶體。
2,可以說有錯,型別不匹配,可以說沒有錯,因為指標就是無符號的整數,互相賦值沒有大問題。
3,和2相同的問題,但是p1指標沒有初始化,無法得知指向。編譯通過,但警告。
4,型別不匹配,操作的時候會有問題,雖然編譯能過,會警告。把double當char處理會有意想不到的問題。
C中void是做什麼的,我現在剛剛學求熱心人士說是
void是函式返回值 例如public void all 二public int all 定義一個過程。過程是一些語句的 打包 過程不需要返回什麼東西,但是我們需要給這個玩意一個地方去儲存,於是出現了void。如果一定要返回什麼具體的東西,我們把帶返回值的過程叫函式。void關鍵字在c 中代表沒有型...
不定積分等概念中C為什麼是任意常數而不是實數
常數 是指 某一個具體的 固定不變的實數,任意常數 是指 任意一個不變的實數。實數 是指一個大的集合範圍 常數 實數,常數表示了固定不變性 不定積分為什麼要加任意常數c 因為任意可積函式的不定積分結果有無窮個解,這些解之間相差一個常數項,所以加一個常數c其實表示的是不定積分的解集 任意常數涵蓋了所有...
我剛剛向我喜歡的人表白了,他說我們還不是很熟。以後瞭解我之後可能會喜歡上我,讓後又問我感覺是什麼
現在可以理解是委婉的小拒 絕,是因為他還不確定他對你的感覺的是有多喜歡,或者是還沒到喜歡的程度,建議兩個人相處下,不是說,愛情最好的關係,就是我喜歡你你也喜歡我,但是兩個人都不說的時候嗎?如果真的喜歡,就要堅持哦,這種是事情是不能勉強的,在他說喜歡上你之前,還是不要太著急,這樣對兩個人都好 首先呢 ...