私は非常に混乱しています。頭痛がします。私はCに不慣れです。
#include<stdio.h>
int main()
{
int i = 257;
int *iPtr = &i;
printf("val 1: %d \t val 2: %d \n\n",*( (char*)iPtr ), *( (char*)iPtr+1) );
int iptr_alias = iPtr;
int and_val = iptr_alias & 255;
printf("Value of iPtr (aka address of i): %d \n\n", iPtr);
printf("Value at location pointed to by iPtr using %%c: %c \n\n",*iPtr); //gives weird character
int f = 257;
int *fptr = &f;
printf("char starred fptr: %d \t charred 257: %d \n\n",*((char*)fptr), ((char)257) );
// i know the above is obvious.
system("PAUSE");
}
私の質問:
1.どうやら*( (char*) iPtr )
== 257 & 255
1(ビット単位および演算)。そして(char)*iPtr
、同じです。しかし、修飾子1
を使用すると印刷されません。%c
なんで?
2.そしてなぜ*( (char*) iPtr+1 )
=1??
私はこれらすべてにとても混乱しています(混乱を解消するために自分で書いたのですが、そうでなければうまくいきました..)
((char)257)
1
そのことについては、 using%d
または%oまたは%xを与えます。%c
奇妙なASCII文字を与える
つまり、私がそうするとき、printf(" %c ", 257)
私は得られません1
、代わりに、私は奇妙なASCII文字を手に入れます。なんで?
実際の問題では、ととして何が印刷されるかを決定することになっていましval 1
たval 2
。
ばかげて単純なものを見落としているかもしれませんが、この混乱に本当に混乱して疲れています。助けてください。