Уточнение назначения указателей

0

Здесь все еще изучается C++. Попытка понять что-то о назначении указателя. Вопрос у меня есть в комментариях к приведенному ниже коду.

#include <string>
#include <iostream>

int main(){

    std::string test = "foop";
    std::string * pointer;

    *pointer = test;       //Why does this crash my program...
    pointer = &test;    //But this doesn't? 

    return 0;
}

На основании того, что я читал, я думал, что * p = o и p = & o сделали то же самое. Я был бы рад просветлению.

Спасибо!

  • 0
    Вы даже пытались увидеть: cplusplus.com/doc/tutorial/pointers
  • 0
    std::string * pointer; Вы создали указатель, который ни на что не указывает.
Показать ещё 1 комментарий
Теги:
pointers
segmentation-fault

2 ответа

4
Лучший ответ
*p = o;

присваивает o точке p. В вашем коде p (или pointer) не инициализируется, поэтому он присваивает божественным знаниям - что, что приводит к сбою (если вам повезет) или бесшумно разлагает память (если нет).

p = &o;

присваивает адрес от o до p, делая p точкой o. Это четко определено.

  • 0
    повезло, что это приводит к аварии ...
1

Указателю необходимо сначала назначить адрес, чтобы удалить ссылку. Прямо сейчас указатель строки * указывает на адрес мусора! Поэтому, когда вы назначаете строку foo, программа скажет: "Я не хочу, чтобы" foo "жил в дампе! Затем он падает.

Ещё вопросы

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