為什么這個程式會被執行呢

uj5u.com熱心網友回復:
沒什么問題,是對指標賦值呢。5,8地址。樓主并沒有對5,8對應的記憶體做讀寫操作呢?只是指標的加減法,類似普通變數的加減法~uj5u.com熱心網友回復:
你寫的是代碼。機器理解的是0、1
中間有個叫編譯器的為你把你的代碼翻譯給機器聽。
指標、int的區別是編譯器看的。機器看指標和int沒區別
uj5u.com熱心網友回復:
為什么最后等于零了
uj5u.com熱心網友回復:
說的淺點唄還是不懂啊
uj5u.com熱心網友回復:
兩個指標相減的意義在于,假定它們指向同一個陣列內的不同元素,則相減后,得到兩個元素下標的差值。uj5u.com熱心網友回復:
就是說,指標在電腦看來跟int沒任何區別。唯一不同在于:你指定它是指標,那么,電腦就聽你的把int的值當作地址來看。uj5u.com熱心網友回復:
再描述就是:你可以認為指標就是一個int【跟int一模一樣】,但它被你叫做指標,所以,電腦允許你通過(*指標)的方式去把該int的值作為地址訪問指向的資料。
uj5u.com熱心網友回復:
char** 指向的地址里面存放的是char*,char* 的長度是4位元組(32位),8 和 5之間不能存放一個char* ,指標相減結果是二者之間能夠放多少個這個型別的資料
所以p1-p2 放不下一個,因此為0
如果改成char* p1 ,*p2;
p1-p2 就是3
uj5u.com熱心網友回復:
我覺得是因為,你的p,q都沒有開辟指標的空間,在后面 p = (char**)5;q = (char**)8;這兩句就好像是強行給兩個指標空間地址
指標相減的結果=(地址1-地址2)/sizeof(型別)
如上就是 (8 - 5)/ 4 = 0.75
但是由于會默認輸出int型別,因為0
uj5u.com熱心網友回復:
用gcc編譯不行,列印不出來;不理解。uj5u.com熱心網友回復:
對的就是這樣
uj5u.com熱心網友回復:
我覺得是因為,你的p,q都沒有開辟指標的空間,在后面 p = (char**)5;q = (char**)8;這兩句就好像是強行給兩個指標空間地址
指標相減的結果=(地址1-地址2)/sizeof(型別)
如上就是 (8 - 5)/ 4 = 0.75
但是由于會默認輸出int型別,因為0
好的謝謝你
uj5u.com熱心網友回復:
就是說,指標在電腦看來跟int沒任何區別。唯一不同在于:你指定它是指標,那么,電腦就聽你的把int的值當作地址來看。
再描述就是:你可以認為指標就是一個int【跟int一模一樣】,但它被你叫做指標,所以,電腦允許你通過(*指標)的方式去把該int的值作為地址訪問指向的資料。
懂了謝謝
uj5u.com熱心網友回復:
沒什么問題,是對指標賦值呢。5,8地址。樓主并沒有對5,8對應的記憶體做讀寫操作呢?只是指標的加減法,類似普通變數的加減法~
為什么最后等于零了
char** 指向的地址里面存放的是char*,char* 的長度是4位元組(32位),8 和 5之間不能存放一個char* ,指標相減結果是二者之間能夠放多少個這個型別的資料
所以p1-p2 放不下一個,因此為0
如果改成char* p1 ,*p2;
p1-p2 就是3
這個回答是正解
uj5u.com熱心網友回復:
指標 - 指標 = 兩者差/指標所指向變數型別的長度例如,int *a = 12; int*b = 6; a - b = (12-6)/4;
這里說的int型別位元組長度為4
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/15835.html
標籤:C語言
