ポインタの参照渡しを行いたいのですが、中身がどうなっているのかわからず
混乱中です。どうかご指導宜しくお願いします。。。
以下にソースコードを記載します。
=======================================
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日かけても中身が良くみえてきません。こんなに難しいとは。。。
どうしても、どうしても理解したいので、どなたかご教授お願いします!
