有趣的指针行为与scanf和while循环

时间:2016-10-09 16:46:55

标签: c pointers while-loop scanf

我是一名网络开发人员,在业余时间学习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()如何影响指针行为或内存组织?

0 个答案:

没有答案