我的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;
}
有人可以告诉我我的错误或告诉我我是否正确解决了问题?
由于
答案 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;
}