0

我有一个while循环如下。

while (*d++ = *sc++)

由于我希望了解部门中的指针,因此我想进入while循环并了解while循环如何使用指针。

我用过stepgdb但它没有完全进入while循环。有没有办法进入while循环并理解一步的操作。

4

3 回答 3

4

*绑定得比后缀更紧++++右侧将最后应用,因此:

while (*d++ = *sc++)

是相同的:

while (*d = *sc)
{
  d++;
  sc++;

修改要好得多gdb

更新:

不要像这样的 OP 编码!

虽然它可能看起来很酷,并证明你很聪明。普通人脑难以解析,容易出错?我们不想要,是吗?

最好选择上面提出的更清晰的替代方案,让编译器打乱代码。

于 2012-10-18T09:31:36.053 回答
3

选项 1:查看Olaf Dietsche 建议的汇编代码调试。

选项 2:gcc -S test.c在汇编后使用停止编译器以查看程序的汇编代码。理解汇编代码可能有点困难。更多信息在这里

选项 3:将您的程序重写为类似

while(1)
{
    if(*d++ != *sc++)
    {
        break;
    }
}

这样您就可以放置断点并查看值的变化。

于 2012-10-18T09:33:13.823 回答
0

编写代码的另一种但相同的方法是:

*d = *sc;
while (*d > 0)
{
  d++;
  sc++;
  *d = *sc;
}
于 2012-10-18T09:56:18.383 回答