使用指针数组的函数

时间:2015-10-05 17:11:19

标签: c++ function pointers

我的c ++作业中有这个问题。

  

编写并测试所需的功能位置,如下所示,a   整数p的指针表,这样的表n和a的大小   整数值x。

                      int* location (int* p [ ], int n, int x);
     

location搜索表所指向的整数集   指针p匹配x的值。如果匹配的整数是   找到,然后location返回该整数的地址,NULL   否则。

我不确定我是否完全理解这个问题。但是,我试图解决它,但我收到错误(程序崩溃)。这是我的代码。

#include<iostream>
using namespace std;
int* location (int* p [ ], int n, int x);
void main(){
    int arr[3]={1,2,3};
    int *ptr=arr;
    int *address= location (&ptr, 3, 2);
    cout<<&arr[3]<<" should be equal to "<<address<<endl;
}
int* location (int* p [ ], int n, int x){
    for(int i=0; i<n; i++){
        if(*p[i]==x){return p[i];}
    }

    return NULL;

}

有人可以告诉我我的错误或告诉我我是否正确解决了问题?

由于

1 个答案:

答案 0 :(得分:2)

这在您的代码中不正确:

cout<<&arr[3]<<" should be equal to "<<address<<endl;

您正在访问索引为3的数组元素,但是,在您的情况下,您可以访问的最大索引是2.此外,还有下面的替代解决方案。

此外,将指针传递给指向location函数的指针(以及使用它)的方式也是错误的。因为,例如,你没有首先声明指向整数的指针数组。

为了更好地理解下面的例子,您可以尝试在C ++中更多地了解指针数组的概念。

#include <iostream>

using namespace std;
const int MAX = 3;

int* location (int* p [ ], int n, int x);

int main ()
{
   int  var[MAX] = {10, 100, 200};

   // Declare array of pointers to integers
   int *ptr[MAX];

   for (int i = 0; i < MAX; i++)
   {
      ptr[i] = &var[i]; // Store addresses of integers
   }

   int *x = location(ptr, MAX, 100); // Now you have pointer to the integer you were looking for, you can print its value for example
   if(x != NULL) cout<<*x;

   return 0;
}

int* location (int* p [ ], int n, int x)
{
  for(int i = 0; i<n; i++)
  { 
     if(*p[i] == x) return p[i];
  }

 return NULL;
}