3

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

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

4

7 回答 7

8
while(*p != NULL) {

比较错误有两个原因:

  • *p是一个整数,而不是像NULL暗示那样的指针
  • 数组不是 0 终止的,所以即使NULL被视为花哨的 0,它也不会工作

你可以试试:

int nums[] = {1, 0};
while(*p)
于 2012-08-15T19:16:54.623 回答
4

您正在超出数组的范围并查看垃圾值。您的数组大小为 1,并且包含1. 所以当时的条件没有得到满足(或者在某些时候它纯粹是偶然得到的)。

于 2012-08-15T19:17:42.983 回答
3

您的条件错误,数组末尾的指针不会为 NULL,所以发生的事情是您超出了数组边界。

此外,使用*on 指针获取它指向的内存中的值。所以*p在你的情况下意味着“取 p 指向的值”。

于 2012-08-15T19:17:02.407 回答
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;
}
于 2012-08-15T19:24:19.737 回答
0
int GetSize(int a[]){
    int ptr=0;
    while(a[ptr]!= NULL){
        ptr++;
    }
    return --ptr;
}
于 2015-12-08T19:22:12.603 回答
0

虽然您可以尝试以下代码:

int nums[] = {1, 0};
int *p = nums;
while(*p){
    cout << *p;
    p++;
}

请注意,如果您决定在零之后向数组添加更多数字,则在迭代时将无法识别它们。

nums[] = {1, 0, 1, 2}

只会返回

1
于 2016-07-20T23:08:13.947 回答
0

对于 int 数组,我们可以将指针变量指向该数组的最后一个的方法是这样做。x = base_address + sizeof(arr)/sizeof(int) -1; “-1”用于添加两倍的基地址。所以如果我们做 p = x; p 将指向数组的结束元素。

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

于 2020-01-26T23:18:28.550 回答