如果我需要在c中迭代数组,我可以做如下操作:

void uselessTest(const char *p)
{
    while(*p)
    {
        ++p;
    }
}

我想知道这是什么意思:
它是否在每一个循环中测试if (*p != null)
如果它确实p = p + 1,那意味着什么?p是数值吗?*p应该是指针的值,p应该是指针的地址吗?所以在这个循环中p改变而*p保持不变?

最佳答案

它是否在每个循环中测试if(*p!= NULL)?
我认为更正确的说法是它检查是否*p!=0
如果p=p+1,那是什么意思?p是数值吗?
appearsc标准没有定义指针在内部是什么。但在下面的例子中,我假设p持有一个表示为整数的地址(通常是这种情况)。在这种情况下,在上面的示例中,当您向其中添加一个时,p将移动到下一个
地址,例如,如果p是0x1000,递增后它将变成0x1001(这是因为char的大小是1,如果p是指向int的指针,它将向前移动4个字节*—给定的整数大小是4)。
所以在这个循环中,p改变,而*p保持不变?
不,实际上*p试图取消引用p,换句话说,获取存储在地址p的对象的内容。因此,当然,如果更改p的值,也可能在新地址获得不同的内容。例如,如果p的初始值是0x1000,则在递增之后,它将是0x1001,*p将尝试读取0x1001处的值,这可能与存储在0x1000处的值不同。
*查找指针算法以获取有关该操作的详细信息

09-25 18:50