指针变量用于定位数组中的零

问题描述 投票:0回答:3

我试图创建一个代码,尝试使用指针变量扫描数组中的'0',然后将地址设置为数组中具有'0'的空间的地址。不幸的是,我的程序返回10作为值,0作为索引。我真的很感激任何帮助我的输入,我试图这样做而不改变主,所以我不认为以下代码是可能的。

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? 
c++
3个回答
1
投票

您可以按值传递指针。

然后,您更改指针指向的位置,但只修改本地副本。它不会更改调用函数中指针的值。

您可以使用以下两种方法之一解决问题。

  1. 通过引用传递指针。 void findLastZero(int arr[], int n, int*& p);
  2. 从函数返回指针。 int* findLastZero(int arr[], int n); 这将改变您调用该函数的方式。而不是使用: int* ptr; ptr = &nums[0]; findLastZero(nums, 6, ptr); 您可以使用: int* ptr = findLastZero(nums, 6);

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
投票

这看起来像一个家庭作业/测试/测验。

这个测验的答案是:如果不改变main函数,就无法做到这一点。

为什么?

正如其他人已经告诉过你的那样,你需要更改findLastZero签名,或者将p参数类型更改为int*&int**,或者从函数返回int*。如果你不改变findLastZero签名(和main),findLastZero函数无法改变外部ptr变量。

© www.soinside.com 2019 - 2024. All rights reserved.