Как создать массив указателей в C ++ - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь создать массив указателей, используя мой пример профессора в классе. Кажется, я не могу заставить его работать.

char * ISBN[] = {
    "1-214-02031-3",
    "0-070-21604-5",
    "2-14-241242-4",
    "2-120-12311-x", 
    "0-534-95207-x",
    "2-034-00312-2",
    "1-013-10201-2",
    "2-142-1223",
    "3-001-0000a-4",
};

Это мой пример профессора объявления массива указателей типа char. Он говорит, что это то, что мы должны сделать для этого задания. К сожалению, я получаю сообщение об ошибке - Ошибка (активная) E0144 значение типа "const char *" не может быть использовано для инициализации объекта типа "char *" -

Я спрашивал об этом раньше а кто-то сказал, что char * устарела. Но профессор говорит, что это декларация, которую мы должны использовать для выполнения задания. Как бы я go попытался выяснить, как заставить работать этот массив? Что именно делает эта декларация?

Ответы [ 2 ]

3 голосов
/ 14 марта 2020
const char * ISBN[] = {
    "1-214-02031-3",
    "0-070-21604-5",
    "2-14-241242-4",
    "2-120-12311-x", 
    "0-534-95207-x",
    "2-034-00312-2",
    "1-013-10201-2",
    "2-142-1223",
    "3-001-0000a-4",
};

Я думаю, мне просто нужно было добавить const перед char *. Мне еще многое предстоит узнать. Спасибо всем.

1 голос
/ 14 марта 2020

Это просто потому, что вы пытаетесь присвоить строковые литералы указателю char. В c ++ строковые литералы являются константными указателями char, поскольку строковые литералы хранятся в постоянной памяти. Другая причина заключается в оптимизации для компиляторов (сохранение только одного экземпляра). литерала, который повторяется много раз в источнике). Таким образом, вы получаете несколько указателей на одну и ту же память вместо того, чтобы каждый занимал отдельный кусок памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...