Указатели как аргументы функции

0

Опять же, я наткнулся на какое-то упражнение, в котором я не могу понять некоторые основные линии, которые сказали, что я не могу понять, как работают некоторые вещи. Я знаю указатели, но иногда мне кажется, что у меня все еще нет базового знания.

В чем смысл использования указателей в следующем примере (в аргументах функции и сравнении данных строкового типа с данными типа char, как указано в функции с именем: InsertPerson).

Позвольте мне сказать так, у нас есть следующий код:

struct SPerson
{ 
   string name; 
   string surname; 
   int age; 
}; 

priority_queue<SPerson, vector<SPerson>, FunkyFunctor> SuperPQ; 

// ** THIS IS THE BIT OF CODE WHICH I'M HAVING PROBLEM WITH

void InsertPerson(SuperPQ &kp, const char *name, const char *surname, int age) 
{ 
   SPerson newPerson; 
   newPerson.name = name; 
   newPerson.surname = surname; 
   newPerson.age = age; 

   kp.push(newPerson); 
 } 

int main(void)
{ 
    SuperPQ superQUEUE; 


    InsertPerson(superQUEUE, "Jeremy", "Clarkson", 54); 

 } 

Почему мне нужны указатели в качестве аргументов функции в функции, называемой InsertPerson, почему я не могу использовать эти переменные вместо своих указателей?

Заранее благодарю за вежливость и любое легкое для понимания объяснение;)

Ура!

  • 4
    Вы могли бы сделать это взять const std::string& name, const std::string& surname
Теги:
pointers

2 ответа

2

Строковый литерал, т.е. "hello" имеет тип "массив из n const char" (§ 2.14.5/8). В некоторых случаях массивы, как говорят, распадаются на указатели на их первый элемент. Поэтому const char не подходит для принятия аргумента, который ожидает строковый литерал. Как упоминалось в @Creris, поскольку ваши члены данных являются std::string s, вам не нужно использовать const char* и вместо этого вместо них заменить const std::string&.

0

Массив должен быть передан указателем в C и C++. Это потому, что аргументы функции - это только одиночные значения, а массивы и структуры - несколько значений.

Так как указатель - это одно значение, он может быть передан там, где не может быть нескольких значений. Он указывает на те структуры или массивы.

На уровне машинного кода это связано с тем, что соглашения о вызовах функций имеют только места в регистре или стеке для одиночных значений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню