我对手动指定了带偏移量的指针的整数值,看起来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