公式アカウントからの投稿が始まります

仮に&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したい場合は
どう書けばよいのでしょうか?

++str[i++] または str[i++]++
for ( ... ;str[i]++, i++) の方が明快か。

と解答を頂いたのですが、

補足になってしまい申し訳ないですが、
例えば、*p は str[i]より、ループ三周目のアドレスの指す数値を知りたいときは
if (i == 3){ printf("%d\n", str[3]);};と書けばいいのでしょうか?
仮に*p は str[i]よりよりprintf("%d\n", str[3]);の部分のstr[3]のように書くにはどう書けばいいのでしょうか?if (i == 3){ printf("%d\n", *p ==3);};でしょうか?


もう一つ、「仮に&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したい場合は
どう書けばよいのでしょうか?

++str[i++] または str[i++]++
for ( ... ;str[i]++, i++) の方が明快か。と言われたのですが、
アドレスとアドレスの指すメモリの数値を上げるならば、++str[i++] または str[i++]++に&を付けてアドレスとアドレスの指すメモリに入る数値を同時にあげる書き方はないのでしょうか?(なぜ&をつけていないのにアドレスも上がるのか疑問です。)
要は++&str[i++] または &str[i++]++という書き方はないのでしょうか?
ただ、アドレスを上げながらアドレスの指すメモリに入った数値を上げる書き方が
++str[i++] または str[i++]++と決まっているならば従うしかないですが。

A 回答 (1件)

>ループ三周目のアドレスの指す数値を知りたいときは


>if (i == 3){ printf("%d\n", str[3]);};と書けばいいのでしょうか?

ループ一周目のときはi=0なので、ループ三周目のときはi=2のはず。
if (i == 2) printf("%d\n", str[2]);
この場合、str[2]はstr[i]でも可。

>printf("%d\n", str[3]);の部分のstr[3]のように書くにはどう書けばいいのでしょうか?

p = &str[0];の条件で間違いないなら、
if (i == 2) printf("%d\n", *(p+2));
p+2のアドレスは &str[2]と同一。

>アドレスを上げながらアドレスの指すメモリに入った数値を上げる書き方が
>++str[i++] または str[i++]++と決まっているならば従うしかないですが。

配列の数値の参照なので、従ってください。
&str[i] と書くのは、関数の引数がアドレスを要求している場合や、ポインタにアドレスを代入するときくらい。
(例)
p = &str[0];
printf("%p\n", &str[2]); /* str[2]のアドレス表示 */
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!