2015-10-05 3 views
1

У меня есть этот вопрос в моей домашней работе на C++.Функция, которая использует массив указателей

Написать и протестировать расположение функции, которая принимает, как показано ниже, в таблице указателей на целых р, размер такой таблицы п и значение х целого.

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

расположение ищет множество целых чисел, на который указывает таблицу указателей р для соответствия значению х. Если найдено подходящее целое число , тогда местоположение возвращает адрес этого целого числа, 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

Я бы сказал, что проблема заключается в 'return NULL;'. –

+0

Как показано ниже, вы передаете указатель на массив целых чисел в функцию. Вам нужно передать массив указателей на целые числа в функцию. –

+0

Напишите код '* (p [i])' или '(* p) [i]', чтобы ваш код был очищен. (Согласно описанию, вы хотите первый) –

ответ

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; 
} 
+1

Огромное спасибо <3 , если возможно, объявить массив указателей на целые числа, что такое почтение между: int * ptr = var; и для (int i = 0; i Adam

+0

@Adam: В вашем случае ptr - это просто указатель, тогда как в моем случае ptr представляет собой массив указателей, поэтому я предложил вам немного почитать что-то по этой теме, чтобы понять различия; поскольку у вас может быть массив целых чисел, вы можете иметь массив указателей –

Смежные вопросы