c ++函数,静态变量返回数组中的下一个值

时间:2017-04-08 19:53:58

标签: c function pointers static

使用作为指针的静态变量创建一个函数(默认参数为零)。当调用者为此参数提供值时,它用于指向int数组的开头。如果使用零参数调用该函数(使用默认参数),该函数将返回数组中的下一个值,直到它在数组中看到“-1”值(作为数组的结尾(指示符) )。在main()中练习这个函数。

这就是我所拥有的:

int pr(int *p = 0) {
    static int* po =0 ;
    if (p) {
        po = p;
        return *po;
    }
    else {
        return -1;
    }

    if (*p == -1) {
        return -1;
    }
    return *po++;    
}

int ar[] = {2,5,1,2,6,-1};

int main() {

    pr(ar);

    int pl;
    pl = pr();
    while (pl != -1) {
        cout << pl << endl;
        pl = pr();
    }
}

当我开始时,没有任何内容被打印出来,我不知道为什么。有帮助吗?

1 个答案:

答案 0 :(得分:0)

您还需要保留下一个数组索引:

int f(int* a = NULL) {
  static int* arr = NULL;    // internal state ...
  static int idx = 0;        // ...in these two vars

  // Reset the internal state if a new array is given
  if (a != NULL) {
    arr = a;
    idx = 0;
  }

  // #1
  if (arr == NULL || arr[idx] == -1) { return -1; }

  return arr[idx++];
}

我对您在标记为#1的问题中未指明的部分做了一些假设。如果尚未提供指针,或者之前已到达数组末尾,我们每次只返回-1