int**ptr(指向指针的指针)作为C++函数参数意味着什么



我被要求编写一个程序,该程序获取一个整数数组arr及其逻辑大小。当被调用时,它会创建一个只包含arr中的正数的新数组。例如,如果是arr=[3, -1, -3, 0, 6, 4],函数应该创建一个包含以下3个元素的数组:[3, 6, 4]

具体功能应该是这样的:

void getPosNums4 (int* arr, int arrSize,int** outPosArrPtr, int* outPosArrSizePtr)使用指针outPosArrPtr来更新数组的基地址(包含正数(并且使用指针outPosArrSizePtr来更新数组逻辑大小。

我很难理解** outPosArrPtr的含义,以及如何在主函数和函数调用中使用它。我知道我的主函数的cout将是新数组内存中的地址,以及新数组的大小。非常感谢。

#include <iostream>  
using namespace std;
void getPosNums4(int* arr, int arrSize, int** outPosArrPtr, int* outPosArrSizePtr);
int main(){
int arr[8]= {3,-1,-3,0,6,4,-5,8};
int* inputPtr = arr;
int inputArrSize = 8;
int* outputArrSizePtr = new int;
int outputArrSize = 0;
outputArrSizePtr = &outputArrSize;
int* outPosArr = new int[outputArrSize];
int** outPosArrPtr = &outPosArr;
cout<<"Test function 4: "<<endl;
getPosNums4(inputPtr, inputArrSize, outPosArrPtr, outputArrSizePtr);
cout<<outPosArrPtr<<*outputArrSizePtr4<<endl;
return 0;
}

void getPosNums4(int* arr, int arrSize, int** outPosArrPtr, int* outPosArrSizePtr) {
for (int i = 0; i < arrSize; i++){
if (arr[i] > 0){
*outPosArrPtr[*outPosArrSizePtr] = arr[i];
*outPosArrSizePtr = *outPosArrSizePtr + 1;
}
}
}

int** outPosArrPtr是一个指针数组,或者是指向指针的指针。这是C语言中的一个常见概念,我推荐Kernighan和Ritchie的《C编程语言》来了解更多细节。

要了解发生了什么,首先让我们看看指向int的更简单的指针:

int *outPosArrPtr

在C中,指向int的指针可以等效于整数数组:

int outPosArrPtr[]

但是第二个*呢?

-这意味着您有一个指向int的指针可以将其用作指针对int的数组。因此,函数void getPosNums4本身不会创建一个只包含正数的新数组。相反,它返回一个指针数组,其中的指针仅指向原始输入数组int *arr中正数的存储位置。

相关内容

  • 没有找到相关文章

最新更新