提问人:ArlHob 提问时间:3/23/2022 最后编辑:n0rdArlHob 更新时间:3/25/2022 访问量:419
int ** ptr(指向指针的指针)作为 C++ 函数参数是什么意思?
What does int ** ptr (pointer to a pointer) as a C++ function argument mean?
问:
我被要求编写一个程序来获取整数数组及其逻辑大小。调用时,它会创建一个新数组,仅包含来自 arr 的正数。
例如,如果 ,函数应创建一个包含以下 3 个元素的数组: ,arr
arr=[3, -1, -3, 0, 6, 4]
[3, 6, 4]
具体功能应该是这样的:
void getPosNums4 (int* arr, int arrSize,
int** outPosArrPtr, int* outPosArrSizePtr)
使用指针更新数组的基址(包含正数),使用指针更新数组的逻辑大小。outPosArrPtr
outPosArrSizePtr
我很难理解是什么意思,以及如何在主函数和函数调用中使用它。我知道我的主要函数的 cout 将是新数组内存中的地址,以及新数组的大小。谢谢。** outPosArrPtr
#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 的 The C Programming Language 来了解更多细节。
要了解发生了什么,首先让我们看一下更简单的指向 int 的指针:
int *outPosArrPtr
在 C 语言中,这个指向 int 的指针可以等效于一个整数数组:
int outPosArrPtr[]
但是第二个呢?*
-这意味着你有一个指向指向 int 的指针,你可以将其用作指向 int 的指针数组。
因此,该函数本身不会创建一个仅包含正数的新数组。相反,它返回一个指针数组,该指针的指针仅指向原始输入数组中正数的内存位置。void getPosNums4
int *arr
评论
std::vector