我是一名网络开发人员,在业余时间学习C语言。 我想不出对下面这个案子的明确解释。
int arr[] = {1,2,3,4,5};
int *ptr = arr;
char in1[1];
char forward;
char back;
printf("Start from Adress: %p |||| Value: %d\n", ptr, *ptr);
forward = 0;
back = 1;
while( back<10 ){
back++;
ptr++;
printf("walked forward..\n----\nAdress: %p |||| Value: %d\n ", ptr, *ptr);
}
按预期工作并给出结果,
地址:0x7fff57954220 ||||价值:1
地址:0x7fff57954224 ||||价值:2
地址:0x7fff57954228 ||||价值:3
依旧......
但下面的一个给出了奇怪的结果,
while( (!forward && back) || (forward && !back) ){
scanf("%s", in1);
forward = strncmp(in1,"f",1);
back = strncmp(in1,"b",1);
if(!forward){
ptr++;
printf("walked forward..\n----\nAdress: %p |||| Value: %d\n ", ptr, *ptr);
}
else if(!back){
ptr--;
printf("walked backwards..\n----\nAdress: %p |||| Value: %d\n ", ptr, *ptr);
}
}
增加3个步骤:
地址:0x7fff572da204 ||||价值:1711277311
地址:0x7fff572da204 ||||价值:1711277311
地址:0x7fff572da204 ||||价值:1711277311
减少3步:
地址:0x7fff577c91fc ||||价值:16809983
地址:0x7fff577c90fc ||||价值:512
地址:0x7fff577c8ffc ||||值:0
这是为什么? scanf()如何影响指针行为或内存组织?