使用c while循环循环所有整数数组元素

时间:2012-08-15 19:15:30

标签: c++ arrays pointers

我试图使用指针循环一个整数数组,但我得到一个奇怪的值..

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指针,并在每个循环上移动下一个指针。

7 个答案:

答案 0 :(得分:8)

while(*p != NULL) {

比较错误有两个原因:

  • *p是一个整数,而不是像NULL暗示
  • 这样的指针
  • 数组不是0终止,所以即使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将指向数组的结束元素。

这就像通过索引访问数组元素。