我正在尝试制作一个代码,试图扫描数组中的' 0'使用指针变量,然后将地址设置为数组中具有' 0'的空间的地址。在里面。不幸的是,我的程序返回10作为值,0作为索引。我真的很感激任何帮助我的输入,并且我试图在不改变main的情况下这样做,所以我不认为以下代码是可能的。
int* zerofinder(int array[], int q)
{
int* p = null; /// default value if there isn't a 0 in the array at
all
for (int k = q - 1; k >= 0; k--)
{
if (arr[k] == 0) // found an element whose value is 0
{
p = arr[k]; // change the value of p
break; // stop looping and return
}
}
return p;
}
相反,我认为我必须使用
void zerofinder(int array[], int x, int* p); function to change the pointer?
答案 0 :(得分:1)
问题是你没有从函数
返回你想要的值int* findLastZero(int arr[], int n)
{
int* p = nullptr; /// default value if there isn't a 0 in the array at all
for (int k = n - 1; k >= 0; k--)
{
if (arr[k] == 0) // found an element whose value is 0
{
p = &arr[k]; // change the value of p
break; // stop looping and return
}
}
return p;
}
和
ptr = findLastZero(nums, 6);
有时新手认为指针是特殊的,但指针也是值,并且遵守关于传值的通常的C ++规则。如果将指针传递给函数,那么更改函数内部指针的值对函数外部的值没有影响,就像任何其他类型一样。
答案 1 :(得分:1)
按值传递指针。
然后更改指针指向的位置,但只修改本地副本。它不会更改调用函数中指针的值。
您可以使用以下两种方法之一解决问题。
通过引用传递指针。
void findLastZero(int arr[], int n, int*& p);
从函数返回指针。
int* findLastZero(int arr[], int n);
这将改变您调用该函数的方式。而不是使用:
int* ptr;
ptr = &nums[0];
findLastZero(nums, 6, ptr);
你可以使用:
int* ptr = findLastZero(nums, 6);
答案 2 :(得分:1)
这看起来像是家庭作业/考试/测验。
此测验的答案是:无需更改main
功能即可完成此操作。
正如其他人已经告诉您的那样,您需要更改findLastZero
签名,将p
参数类型更改为int*&
或int**
,或者返回{{ 1}}来自函数。
如果您不更改int*
签名(以及findLastZero
),则main
函数无法更改外部findLastZero
变量。