如果我需要在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处的值不同。
*查找指针算法以获取有关该操作的详细信息