私はいつもCで*&p = p =&* pだと思っていました。私はこのコードを試しました:
#include <stdio.h>
#include <stdlib.h>
char a[] = "programming";
char *ap = &a[4];
int main(void)
{
printf("%x %x %x\n", ap, &*(ap), *&(ap)); /* line 13 */
printf("%x %x %x\n\n", ap+1, &*(ap+1), *&(ap+1)); /* line 14 */
}
最初のprintf行(13行目)は私にアドレスを与えます:
40b0a8 40b0a8 40b0a8
予想通りです。しかし、2番目のprintf行を追加すると、Borlandは次のように不平を言います。
"first.c":E2027行14の関数mainのメモリ位置のアドレスを取得する必要があります
私は得ることを期待していました:
40b0a940b0a940b0a9。
14行目の*&(ap + 1)という表現が原因のようです。14行目の3つのポインター式はすべて同等だと思いました。なぜ私は間違って考えているのですか?
2番目の関連する質問:行
char *ap = a;
配列aの最初の要素を指します。使用しました
char *ap = &a[4];
配列aの5番目の要素を指す。
表現は
char *ap = a;
式と同じ
char *ap = &a[0];
最後の表現は前の表現よりも冗長なだけですか?
どうもありがとう...