関数内の自動変数(ポインタと配列の違い)
Posted: 2014年5月12日(月) 22:29
すみません!先ほど質問した者ですが、肝心なことを聞く前に「解決」をしてしまったため、読んで貰えなかったら
困るのでもう一度トピック建てさせて下さい。
先ほど教えていただいた部分を修正したコードです。
charTest内で、
char*のポインタ型で自動変数を作成すると、main関数での出力は「charTest」と表示されますが、
char型の配列で自動変数を作成すると、main関数での出力は 不定のランダムな文字列 が表示されます。
関数を抜けたら、自動変数はメモリから削除されるので、不定な文字列が表示されるのが
当然かなと思ったのですが、なぜポインタ変数は関数を抜けても残っているのでしょうか?
困るのでもう一度トピック建てさせて下さい。
void charTest(char** str){
char *p = "charTest"; //これはOK
//char p[]="charTest"; //これはNG
*str = p;
}
int _tmain(int argc, _TCHAR* argv[])
{
char* cMoji = "main";
charTest(&cMoji);
std::cout << cMoji << "\n";
return 0;
}
charTest内で、
char*のポインタ型で自動変数を作成すると、main関数での出力は「charTest」と表示されますが、
char型の配列で自動変数を作成すると、main関数での出力は 不定のランダムな文字列 が表示されます。
関数を抜けたら、自動変数はメモリから削除されるので、不定な文字列が表示されるのが
当然かなと思ったのですが、なぜポインタ変数は関数を抜けても残っているのでしょうか?