ポインタの参照渡しを行いたいのですが、中身がどうなっているのかわからず
混乱中です。どうかご指導宜しくお願いします。。。
以下にソースコードを記載します。
======================================= int main(void) { int len; char str; len = get(&str); out(&str, len); } int get(char *str) { int i; str = (char *)malloc(3 * sizeof(char)); for (i = 0; i < 2; i++) { *(str + i) = 'a'; } return 2; } void out(char *str, int len) { int i; for (i = 0; i < len; i++) { printf("%c\n", *(str + i)); } } =======================================get関数で、参照渡しした変数に値を代入し
main関数に戻す という処理を行いたいのですが。。。
get関数で行っていること(私の頭の中での考え)が
1. malloc で参照渡しされたアドレスの領域を 3つ確保する。
----- -------------
| ? | -> | ? | ? | ? |
----- -------------
2. 確保した領域の "1", "2" に "a"を入れる。
------------- -------------
| ? | ? | ? | -> | a | a | ? |
------------- -------------
質問は3つあります。
1. 上記の考え方のどこが間違えているのか。
2. main関数からget関数に "str" を渡すとき
&str としているのですが、これは "str" の先頭アドレスを渡しているのか。
3. get関数内で "*str", "str" はそれぞれ、何を意味しているのか(アドレス, 値)
("*" が付くものはアドレス だと思っているのですが、 "str" これもアドレスじゃないのかと
思ってしまいます。)
2日かけても中身が良くみえてきません。こんなに難しいとは。。。
どうしても、どうしても理解したいので、どなたかご教授お願いします!