使用作为指针的静态变量创建一个函数(默认参数为零)。当调用者为此参数提供值时,它用于指向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();
}
}
当我开始时,没有任何内容被打印出来,我不知道为什么。有帮助吗?
答案 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
。