我對手動指定了帶偏移量的指針的整數值,看起來ptr+1
實際上並不指向second_int
,或者是因爲printf
函數不知道大小的ptr+1
?將偏移值賦值給指針C
#include <stdio.h>
int main(void)
{
int first_int = 42;
int second_int = 23;
int *ptr = &first_int;
*(ptr + 1) = second_int;
int i = 0;
for (i = 0; i < 2; i++) {
printf("%d\n", *(ptr+i));
}
return 0;
}
,輸出是:
42
1
難道不應該是42和23?
而且我發現每次我打印*(ptr+1)
時,它遞增1
#include <stdio.h>
int main(void)
{
int first_int = 42;
int second_int = 23;
int *ptr = &first_int;
*(ptr + 1) = second_int;
int i = 0;
for (i = 0; i < 10; i++) {
printf("%d\n", *(ptr+1));
}
return 0;
}
,輸出是:
0
1
2
3
4
5
6
7
8
9
發生了什麼?
編輯:
我只允許使用指針,但並非陣列(做學習C堅硬方式鍛鍊; Tibial)。所以我通過int *ptr = malloc(sizeof(int) * 2);
手動爲ptr
分配內存,然後我給ptr
和ptr + 1
賦值,並且代碼按預期運行。
未定義的行爲發生。 second_int不保證與first_int相關的特定位置,更不用說您期望的。你已經踐踏了記憶中的其他地方,我猜想它屬於變量「i」。 –
你爲什麼認爲ptr + 1指向second_int? – immibis