美文网首页
自增自减与指针相关

自增自减与指针相关

作者: mark_x | 来源:发表于2019-07-30 20:31 被阅读0次

    自增自减

    简单的使用i++不会产生什么问题,比较麻烦的是使用变量与变量自增(自减)混在一起的时候,下面是关于这个问题的分析。

    // 自增自减写在变量前后的区别
    // 如果++写在变量的前面,则会先将变量自增,再用自增后的结果参与运算
    // 如果++写在变量的后面,则会先将变量的值参与运算,再将变量自增
    // 自减与自增一样
    int a = 10;     // a -> 10
    int b = a++;    // b -> 10  a -> 11
    int c = ++a;    // c -> 12  a -> 12
    printf("a --> %i\n", a);    // a --> 12
    printf("b --> %i\n", b);    // b --> 10
    printf("c --> %i\n", c);    // c --> 12
    
    int a = 10;         // a --> 10
    // int b = (a++) + (++a);           // a --> 12     b --> 22
    // int b = (a++) + (a++);           // a --> 12     b --> 21 
    int b = (++a) + (++a);              // a --> 12 b --> 23 
    --------------------- 
    作者:crazy_zhangcong 
    来源:CSDN 
    原文:https://blog.csdn.net/crazy_zhangcong/article/details/87916766 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    

    指针变量

    指针变量进行自增自减时,其指向位置。

    获取字符串的长度

    #include <stdio.h>
    
    #define MAX 1024
    
    int main()
    {
            char str[MAX];
            char *target = str;
            int length = 0;
    
            printf("请输入一个字符串:");
            fgets(str, MAX, stdin);
    
            while (*target++ != '\0')
            {
                    length++;
            }
    
            printf("您总共输入了 %d 个字符!\n", length - 1);   // 注意length -1
    
            return 0;
    }
    

    注意: fgets 函数会把换行符('\n')也一并读取进去。

    考虑一种简单地情况,字符串str只有一个字符。

    第一次循环:

    • 自增的优先级高于取值运算符,执行target++。前面写到,如果++写在变量的后面,则会先将变量的值参与运算,再将变量自增,则实际上语句*target++相当于执行*target;,此时target →(指向) <首地址>,因为有一个字符,所以判断为真,判断完后,执行target,指针位置加一,此时target →(指向) <第二个元素地址>
    • 进入循环体。
    • 循环体内length加一。

    第二次循环:

    • 根据先使用后自增的原则,执行判断语句时,指针指向第二个元素'\n'(前面提到,fgets函数会把回车也读进来),判断为真,然后指针加一,进入循环体。
    • 循环体结束后,length = 2。

    第三次循环:

    • 此时指针指向'\0',判断为假,不执行循环体,打印结果。由于多计算了'\n',因此在printf的时候要减去。

    相关文章

      网友评论

          本文标题:自增自减与指针相关

          本文链接:https://www.haomeiwen.com/subject/emsorctx.html