Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

C言語で関数の引数は別アドレスが用意される模様。

伝えたいこと

すっごい例コードが悪いですが、下記のmain関数内のcpとtest関数内のcpは違うアドレスに確保される模様。要は参照渡し的なことをしたかったけど、そんなことになってませんよ。っていうお話。

void test(char* cp) {
   printf("2:%p \n", &cp);
}

int main() {
   char* cp = NULL;
   printf("1:%p \n", &cp);
   test(cp);
   return 1;
}

あくまで、cpは「ポインタ変数」なので、スコープが違うと別変数扱い(別アドレス)になります。main関数でcpのアドレスを渡してるのですから、と勘違いしていました。

結局main関数で渡しているのもポインタ変数のアドレスなので、それを渡しても…って雰囲気ですし。そもそも変数への代入と値のコピーがごっちゃになってるので、こういう間違いに繋がります。

正直なところ

慣れる気がしない。