阅读背景:

问if(a++!=b++)的意思

来源:互联网 
char *mat(char *a,char *b)

    while(*char!='
char *mat(char *a,char *b)

    while(*char!='\0')
            {
                if(*a++!=*b++) return NULL;
             }
       return b;
}


求解, 其中  “ if(*a++!=*b++)”   的意思,,, 

11 个解决方案

#1


while(*char!='\0') 請問這段程式碼是否有錯??? 

#2


引用 1 楼 aa5566f4 的回复:
while(*char!='\0') 請問這段程式碼是否有錯??? 


额 是whie( *b!=‘\0’)
写快了!

#3


  “ if(*a++!=*b++)”   的意思,,, 

首先,我们来看操作符的优先级,++高于*
其次,a,b是指针,
最后,先a++,但这时要注意,*a++表示取指针的内容,但这时取的是*a,,,取完之后a的指针指向+1
同理,b也一样;
  
判断*a是否等于*b,判断完成之后,不管是相等还是不相等,a,b指针都自加1

#4



#include <stdio.h>
char *mat(char *a,char *b);
void main()
{
char *test;
char *_a = "a";
char *_b = "b";
test = mat(_a, _b);
printf("%s\n", test);

}

char *mat(char *a,char *b)

    
while(*b!='\0')
    {
          if(*a++!=*b++) 
  return NULL;
    }
       return b;
}


你單步調試就知道為甚麼了吧

#5


char *mat(char *a,char *b){
    while(*a!='\0'){
        if(*a++!=*b++)   //*a!=*b? a=a+1,b=b+1
            return NULL;
    }
    return b;
}

#6


引用 4 楼 aa5566f4 的回复:

#include <stdio.h>
char *mat(char *a,char *b);
void main()
{
char *test;
char *_a = "a";
char *_b = "b";
test = mat(_a, _b);
printf("%s\n", test);

}

char *mat(char *a,char *b)

    
while(*b!='\0')
    {
          if(*a++!=*b++) 
  return NULL;
    }
       return b;
}


你單步調試就知道為甚麼了吧


看我理解的有没问题,,,就是只有在if(*a++=*b++)才不会返回NULL,,不知道对不对额

#7


引用 3 楼 Evankaka 的回复:
  “ if(*a++!=*b++)”   的意思,,, 

首先,我们来看操作符的优先级,++高于*
其次,a,b是指针,
最后,先a++,但这时要注意,*a++表示取指针的内容,但这时取的是*a,,,取完之后a的指针指向+1
同理,b也一样;
  
判断*a是否等于*b,判断完成之后,不管是相等还是不相等,a,b指针都自加1


然后是,,各自加完后,再比较,,,只要出现(*a++!=*b++)就返回NULL;;是不是啊。。

#8


引用 5 楼 Falleyes 的回复:
char *mat(char *a,char *b){
    while(*a!='\0'){
        if(*a++!=*b++)   //*a!=*b? a=a+1,b=b+1
            return NULL;
    }
    return b;
}


意思是,,(*a++!=*b++)将两个中短的那个全比完,,只要出现不相同的就返回NULL;不知道理解正确么

#9


引用 8 楼 lymymk 的回复:
Quote: 引用 5 楼 Falleyes 的回复:

char *mat(char *a,char *b){
    while(*a!='\0'){
        if(*a++!=*b++)   //*a!=*b? a=a+1,b=b+1
            return NULL;
    }
    return b;
}
不能理解为把短的比较完,while循环只对a进行‘\0’末尾的判断,没有对b的判断,比如a长,b短,那么会一直比较下去,如果前面一直匹配,会和存储b之后的内存进行比较(未定义的结果)。

#10


引用 9 楼 Falleyes 的回复:
Quote: 引用 8 楼 lymymk 的回复:

Quote: 引用 5 楼 Falleyes 的回复:

char *mat(char *a,char *b){
    while(*a!='\0'){
        if(*a++!=*b++)   //*a!=*b? a=a+1,b=b+1
            return NULL;
    }
    return b;
}
不能理解为把短的比较完,while循环只对a进行‘\0’末尾的判断,没有对b的判断,比如a长,b短,那么会一直比较下去,如果前面一直匹配,会和存储b之后的内存进行比较(未定义的结果)。


那为什么调试后发现,,a比b长,,然后如果是return a 的话,,实际上是,输出a和b比较之后的 长度,,比如:a=“abcdeef”;b=“abc”。。。运行之后 得到的是:return a;结果是:deef

#11


引用 10 楼 lymymk 的回复:
Quote: 引用 9 楼 Falleyes 的回复:

Quote: 引用 8 楼 lymymk 的回复:

Quote: 引用 5 楼 Falleyes 的回复:

char *mat(char *a,char *b){
    while(*a!='\0'){
        if(*a++!=*b++)   //*a!=*b? a=a+1,b=b+1
            return NULL;
    }
    return b;
}
不能理解为把短的比较完,while循环只对a进行‘\0’末尾的判断,没有对b的判断,比如a长,b短,那么会一直比较下去,如果前面一直匹配,会和存储b之后的内存进行比较(未定义的结果)。


那为什么调试后发现,,a比b长,,然后如果是return a 的话,,实际上是,输出a和b比较之后的 长度,,比如:a=“abcdeef”;b=“abc”。。。运行之后 得到的是:return a;结果是:deef

就你说的问题来看一下,如果像你那样,当a指向'd‘的时候,b指向’\0',已经不同,返回的是NULL,但是你是直接对传入的指针操作,所以你来打印a指向字符串,是从你a现在指向的地方一直到'\0'结束。我觉得你本意是这样调用:
char* p=mat(a,b);   //p得到NULL

')     while(*



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: