kuschzzp 发表于 2019-12-3 18:13:44

C语言数组名如:*(a--)不是太明白

本帖最后由 kuschzzp 于 2019-12-3 18:15 编辑

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sub(char* ,char );
int main()
{
        char s[]="97531",c;
        c=getchar();
        sub(s,c);puts(s);                        // 我在运行时输入6
        return 0;
}
void sub(char *a,char b)
{
        while(*(a++)!='\0');       //这里我理解的是: 将指针 指向最后一个元素
      
        while(*(a-1)<b)             //这里我我的理解是: 将指针前移一位,和b比较,如果比b小,就做下面的
        *(a--)=*(a-1);        //就是这边不太理解了 ,说一说我的片面理解吧: 将刚才指针前移一位指向的值,赋值给数组第一个元素,然后a--就是指针指向倒数第二个元素
        *(a--)=b;             //   这最后一步就感觉奇怪了,前面有分号,说明不是while循环里的,最后一步把b的值给*(a--),此时这个*(a--)   我觉得应该是指向的7,就是替换掉7吧,但运行结果有7
}

我以为替换掉7,结果7还出现了2个。。。。。。。

运行结果如下:
6
9767531

--------------------------------
Process exited after 4.754 seconds with return value 0
请按任意键继续. . .

匀音一刀文 发表于 2019-12-3 20:11:58

计算机是自左向右运算的
所以*(a--)=*(a-1)可以写成*a = *(a-1);a--

匀音一刀文 发表于 2019-12-3 20:14:41

匀音一刀文 发表于 2019-12-3 20:11
计算机是自左向右运算的
所以*(a--)=*(a-1)可以写成*a = *(a-1);a--

还没说完
地址没变把里面的值给换了
相当于往里面插了个数
页: [1]
查看完整版本: C语言数组名如:*(a--)不是太明白