我试图使用指针循环一个整数数组,但我得到一个奇怪的值..
int nums[1] = { 1 };
int *p = nums;
while(*p != NULL) {
cout << " LOOPING, p is " << *p << endl;
p++;
}
当我跑步时,我得到下一个输出:
LOOPING, p is 1
LOOPING, p is -858993460
LOOPING, p is 4454504
LOOPING, p is 3032019
为什么我会得到那些奇怪的价值观?我应该只看到“1”,因为我循环直到我得到NULL指针,并在每个循环上移动下一个指针。
答案 0 :(得分:8)
while(*p != NULL) {
比较错误有两个原因:
*p
是一个整数,而不是像NULL
暗示NULL
被视为花哨的0,它也不会起作用你可以尝试:
int nums[] = {1, 0};
while(*p)
答案 1 :(得分:4)
你超越了数组的界限,看着垃圾值。您的数组大小为1,包含1
。因此,不能满足时间条件(或者在某些时候它可以通过纯粹的机会得到医学)。
答案 2 :(得分:3)
您的条件错误,指针在数组末尾不会为NULL,所以发生的事情是您超出了数组范围。
此外,使用指针上的*
获取其指向的内存的值。所以*p
在你的情况下意味着“取p指向的值”。
答案 3 :(得分:2)
其他答案已经涵盖了为什么你的代码不起作用 - 只是想添加另一个循环选项:
int main()
{
int nums[] = { 1, 5, 7 };
int *pEnd = nums + sizeof(nums)/sizeof(int) - 1; // point to last element
int *p = nums;
while(p <= pEnd) {
cout << " LOOPING, p is " << *(p++) << endl;
}
return 0;
}
答案 4 :(得分:0)
int GetSize(int a[]){
int ptr=0;
while(a[ptr]!= NULL){
ptr++;
}
return --ptr;
}
答案 5 :(得分:0)
虽然您可以尝试以下代码:
int nums[] = {1, 0};
int *p = nums;
while(*p){
cout << *p;
p++;
}
请注意,如果您决定在零之后向数组添加更多数字,则在迭代时将无法识别它们。
nums[] = {1, 0, 1, 2}
只会返回
1
答案 6 :(得分:0)
在使用int数组的情况下,我们可以通过这样做来将指针变量指向该数组的最后一个数组。 x =基址+ sizeof(arr)/ sizeof(int)-1; “ -1”用于添加两倍的基址。所以如果我们这样做 p = x; p将指向数组的结束元素。
这就像通过索引访问数组元素。