Здесь все еще изучается 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 сделали то же самое. Я был бы рад просветлению.
Спасибо!
*p = o;
присваивает o
точке p
. В вашем коде p
(или pointer
) не инициализируется, поэтому он присваивает божественным знаниям - что, что приводит к сбою (если вам повезет) или бесшумно разлагает память (если нет).
p = &o;
присваивает адрес от o
до p
, делая p
точкой o
. Это четко определено.
Указателю необходимо сначала назначить адрес, чтобы удалить ссылку. Прямо сейчас указатель строки * указывает на адрес мусора! Поэтому, когда вы назначаете строку foo, программа скажет: "Я не хочу, чтобы" foo "жил в дампе! Затем он падает.
std::string * pointer;
Вы создали указатель, который ни на что не указывает.