如果我需要在C中迭代一个数组,我可以做类似的事情:
void uselessTest(const char *p)
{
while(*p)
{
++p;
}
}
我想知道这意味着什么:
if (*p != null)
?p = p + 1
,那是什么意思?是p数值吗? *p
应该是指向的值并且p
指针的地址?那么在这个循环中p
会在*p
保持不变的情况下发生变化吗?答案 0 :(得分:4)
它是否在每个循环中测试if(* p!= null)?
我想说更正确的是它会检查*p!=0
。
如果p = p + 1,那意味着什么?是p数值吗?
它appears C标准没有定义内部指针。但是在下面的例子中,我假设p保存一个表示为整数的地址(通常就是这种情况)。在这种情况下,在上面的示例中,当您向其添加一个时,p
将移至下一个
地址,例如,如果p
为0x1000,则增量后它将变为0x1001(这是因为char
的大小为1,如果p
是指向int
的指针,它将向前移动四个字节 * - 给整数大小为4)。
所以在这个循环中p改变而* p保持不变?
不,确实*p
尝试取消引用p
,换句话说,获取存储在地址p
的对象的内容。因此,当然如果您更改p
的值,您也可能会在新地址获得不同的内容。例如,如果p
的初始值为0x1000,则递增后将为0x1001,*p
将尝试读取0x1001处的值,这可能与存储在0x1000处的值不同。
* 查找指针算法以获取有关该的更多详细信息
答案 1 :(得分:2)
它在每次迭代时测试* p!= null)并且如果它为null则终止循环。
它增加指针,ergo,指针指向下一个地址。因此,使用这样的循环,您可以遍历数组中的项目。
基本上这个循环的作用是:它遍历数组中的字符,直到它到达终止<input type="text" name="sum" id="sum" value="php" size="15" />
<input type="text" name="result" id="result" size="15" value="HERE THE RESULT" disabled />
字符。在每次迭代时,指针\0
增加以指向下一个字符。
答案 2 :(得分:2)
它是否在每个循环中测试if(* p!= null)?
C中没有null
。有一个NUL终结符('\0'
)和NULL
。后者与指针相关联。
支票是
if (*p != 0)
与
相同if (*p != '\0')
如果p = p + 1,那意味着什么?
它将指针sizeof(*p)
字节向前移动。
是p数值吗?
p
是const char*
,换句话说,是指向char
的指针。
* p应该是指向的值而p是指针的地址吗?
*p
是指针p
指向的数据,而p
是指针指向的地址(不同于p
&#39; s地址)
答案 3 :(得分:2)
它是否在每个循环中测试
if (*p != null)
?
如果你的意思是0或'\ 0',是的。
如果
p = p + 1
,那是什么意思?是p数值吗? * p应该是指向的值而p是指针的地址?所以在这个循环中p变化而* p保持不变?
它将指针前进到下一个有意义的位置,因此根据指针算法。是的,它包含一个数字,表示指向对象的地址。究竟;此外,您无法更改指向值(*p
),因为它是const
。
答案 4 :(得分:2)
这是基本的C指针使用。
const char *p
表示指向const char
=&gt;的指针中的p可以修改p
,但不能修改*p
while (*p)
与while (*p != 0)
相同,所以循环在每次迭代时都进行测试*p == 0
++p
会增加指针,因此根据我的第一句话是合法的
结论:此代码循环遍历char数组,直到指向的值为null - C字符串结尾的定义(空终止的char数组)
答案 5 :(得分:2)
“它是否在每个循环中测试if(* p!= null)?”
正确
p是一个包含“char类型的地址”的指针。地址是字节偏移量(偏移量为0)。
p + 1将递增以指向内存中的下一个char地址。由于char是一个字节长,p将使其字节偏移量增加1。 (如果是int32,它将增加4,例如)。 如果p最初为30,则对于char,p + 1将为31,对于int32指针将为34。
在此循环中p发生变化。由于* p是p指向的内存地址中包含的值,因此它也会发生变化(通常,它可能是随机保持不变的情况)。
答案 6 :(得分:2)
while(*p)
这将读取p
指向的字节/字符,并将读取值与0进行比较。即检查* p是否等于零。
++p;
这与p = p + 1;
相同,此增加p
指向下一个字符。
实际上,由于p
指向一个字符数组,因此循环可帮助您遍历所有字符,直到找到空字符。如果p
是指向字符串的指针,则迭代字符串中的所有字符。 null char(\0
)是字符串结束的地方。
| h | e | l | l | o | 0 |
假设字符串“hello”,并且p
指向h,循环迭代5次(对于h,e,l,l,o),并在它看到0时出现。