2017-11-01 8 views
0

私はこのようなものを受け取ることになる:924752f7インクリメントのサイズに応じてポインタ(メモリアドレス)の値はどのように変化しますか?私はCでのポインタを持っているし、のprintfで%xを使用して、それをプリントアウトするとき

を今私は、文字のサイズによってポインタをインクリメントそうのような場合:

pointer += sizeof(char) 

どうすれば924752fbに戻ることができますか? charが1バイト(8ビット)の場合、1つのアドレスだけインクリメントするのではなく、インクリメント後の新しい値は924752f8?

+0

実際に 'sizeof(char)'を書いていますか?あるいは、 'x 'の文字に' sizeof' x''を使用していますか?それらは同じものではありません。 – jwodder

+1

'datatype * p;'として宣言されたポインタは、sizeof(datatype)バイトの倍数で増分され、1バイトではありません。 –

+1

ポインタのタイプは何ですか?あなたが求めている振る舞いを実証する[完全な短いプログラム](https://stackoverflow.com/help/mcve)を表示することができれば助けになります。 –

答えて

0

Sizeof(char)は1ですので、 'ポインタ'に '1'を追加し、ポインタは次の位置を指します。しかし、その次の場所は、ポインタのタイプやポインタが指している変数のタイプによって異なります。長さが4バイトのものを指しているようです。あなたのポインタがこの

char * ptr 

Printステートメントのように宣言されているとし、加算ポインタが0x2001を指します後加算ptrが0x2000で

ptr = ptr+sizeof(char) 

に対処するために指している前にことを示しています。これで

int * ptr 

ptrが添加ポインタが0x2004を指すされた後に添加

ptr = ptr+sizeof(char) 

前0x2000で対処を指している場合。 (intは4バイトの短いintではないと仮定しています)

関連する問題