我不明白else句子的意思是什么。
输出显示*nombre=(*nombre)++,我认为它将显示"fernando",因为总和。但似乎"ffsoboep"不同于**nombre=(*nombre)+1
我的问题是为什么会这样?在这种情况下“++”运算符是如何工作的。谢谢。

void recursiva (char * nombre)
{

    if (*nombre != '\0')
    {
        recursiva(nombre+1);
        if(*nombre > 'A' && *nombre < 'Z')
        {
             *nombre=*nombre | 32;
        }
        else
        {
             *nombre=(*nombre)++;
             printf("%c \n",*nombre);
        }
    }
}

int main()
{
    char nombre[]="Fernando";
    recursiva(nombre);
    printf("%s",nombre);
}

最佳答案

(*nombre)++

并不意味着和
*nombre + 1

它的意思是“返回*nombre的原始值,其副作用是将*nombre的值增加1”。请注意,当*nombre的值确切地增加时是相当模糊的;当它发生在计算(*nombre)++的值之后时,它可能发生在分配给*nombre之前、之后或期间,结果不可预测。
如果您想增加*nombre的值,您不需要将(*nombre)++的值赋回到*nombre,实际上,这样做是undefined behavior。作为第一个近似值,程序被允许做任何事情,直到和包括making demons fly out your nose。只需使用++
(*nombre)++;

+= 1
*nombre += 1;

关于c - C指针总和“不起作用”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21518933/

10-11 21:23