Jacksturdy 发表于 2020-10-2 11:46:05

c语言课后作业求助

在课后作业中有这样一段代码实现strncpy的功能,但我有个疑惑
……
while (n-- && (*target2++ = *target1++) != '\0')
                ;
……

这个*target2++是什么意思?是相当于*(target2+1)吗,还是相当于(*target2)+1呢?根据运算符的结合性,应该是后者,但是这样的话不应该表示将target2变量的数据+1吗,怎么会是指向下一个数组的元素呢?不知我叙述的是否清楚,求解

mrcrisis 发表于 2020-10-2 12:13:26

“*和++”两者优先级相同,按从右到左的顺序执行。
*P++可看成*(P++),即先执行p++,后执行*p
自己实现要是搞不清楚 可以把* 和 ++用两个语句去写

Jacksturdy 发表于 2020-10-2 12:29:27

mrcrisis 发表于 2020-10-2 12:13
“*和++”两者优先级相同,按从右到左的顺序执行。
*P++可看成*(P++),即先执行p++,后执行*p
自己实现要 ...

https://fishc.com.cn/forum.php?mod=viewthread&tid=67664&extra=page%3D1%26filter%3Dtypeid%26typeid%3D571在这里面不是从左边到右边吗?

Jacksturdy 发表于 2020-10-2 13:22:54

2. 你们可能对 *target++ != '\0' 这一行代码有疑问,这里我给大家解释下。首先在“运算符的优先级和结合性”(http://bbs.fishc.com/thread-67664-1-1.html)可以查到自增运算符(++)的优先级比取值运算符(*)要高,所以 *target++ 相当于 *(target++),先执行自增运算符,再取值。但由于这是一个后缀的自增运算符,所以自增的效果要在下一条语句才会生效,因此这里取出来的依然是 target 地址自增前指向的数组元素的值

巴巴鲁 发表于 2020-10-2 17:42:31

从右到左,*p++相当于*(p++)

llf123456 发表于 2020-10-2 23:21:54

#include<stdio.h>

int main()
{
              printf("\n\
                      @\n\
                     / \\\n\
                     * *\n\
                     * *\n\
                     * *\n\
             * * * * * *\n\
           * * * * * * * *\n\
       * * * * * * * * * *\n\
                 * *\n\
             * *\n\
                   * * * *\n\
               * * * * * *\n");
               
               return 0;
} 打出来的飞机为什么变形了

Jacksturdy 发表于 2020-10-3 15:39:26

llf123456 发表于 2020-10-2 23:21
#include

int main()


我的打来没问题啊,自己要空格一个一个敲

Jacksturdy 发表于 2020-10-3 15:40:44

llf123456 发表于 2020-10-2 23:21
#include

int main()


不要直接复制粘贴,自己一个一个空格敲
页: [1]
查看完整版本: c语言课后作业求助