所以我知道我可以使用一個指標的解參考值作為for-loop中的條件。然而,我一直在嘗試使用指標的位置(在它所指向的陣列中)作為終止條件。
換句話說,當指標迭代到它所指向的陣列中的(例如第三個)元素時,終止回圈。
下面是我的代碼:
int main() {
int *ptr = (int*) calloc(5, sizeof(int)。
//returns an int pointer pointing at {0, 0, 0, 0, 0} 正確嗎?
for (int i=0; ptr < ptr 3; ptr , i ){ //i是用來計數。
*ptr = i 1; //將每個元素的定義值改為1。
printf("ptr的%d元素的值是:%d
", i, *ptr)。)
}
return 0;
}
我希望輸出結果是:
ptr的0元素的值是。1的值
ptr的1元素的值是。1 1
ptr的2元素的值是。1
然而,我的代碼一直在運行和輸出,直到達到一個瘋狂的高數字時中斷(ptr的值1939010是:1939011)。
我不確定是我對指標的理解有誤,還是我的代碼有問題
。uj5u.com熱心網友回復:
這個for loop
for (int i=0; ptr < ptr 3; ptr , i ){ //i 用于計數。
*ptr = i 1; //將每個元素的定義值改為1。
printf("ptr的%d元素的值是:%d
", i, *ptr)。)
}
是不正確的,因為它呼叫了未定義的行為。:) 運算式ptr顯然小于運算式ptr 3。
你需要的是下面的內容
int i = 0;
for ( int *p = ptr; p < ptr 3; p ){ //i 是用來計數的。
*p = i; //將每個元素的定義值改為1。
printf("p的%d元素的值是:%d
"/span>, i - 1, *p)。
}
也就是說,你需要引入一個新的指標型別的變數,它將在for回圈中被遞增。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322458.html
標籤:
