我有一个while
循环,如下所示。
while (*d++ = *sc++)
由于我希望理解dept中的指针,我想进入while
循环,并了解while
循环如何处理指针。
我在step
中使用了gdb
,但它没有完全进入while
循环。有没有办法进入while
循环并理解每个步骤中的操作。
答案 0 :(得分:4)
*
比postfix ++
更紧密。右侧++
将最后应用,所以:
while (*d++ = *sc++)
与:
相同while (*d = *sc)
{
d++;
sc++;
在gdb
中跟踪修改要好得多。
<强>更新强>
不要像这样的OP编码!
虽然看起来很酷,但证明你很聪明。很难被常见的人类大脑解析,因此容易出错?我们不想要的,是吗?
最好选择上面提到的更清晰的替代方案,让编译器加扰代码。
答案 1 :(得分:3)
选项1: 按照Olaf Dietsche的建议查看assembly code debugging。
选项2:
汇编后使用gcc -S test.c
停止编译,以查看程序的汇编代码。理解汇编代码可能有点困难。更多信息here
选项3: 将程序重写为类似
的程序while(1)
{
if(*d++ != *sc++)
{
break;
}
}
这样您就可以放置断点并查看值的变化。
答案 2 :(得分:0)
编写代码的另一种方法是:
*d = *sc;
while (*d > 0)
{
d++;
sc++;
*d = *sc;
}