2016-09-25 5 views
-1

私のC++クラスでは、先生が私にこのコードを教えてくれました。今ポインタに関するサイズの理解

12647972 to 12647989 

を印刷し

#include <iostream> 

using std::cout; 
using std::endl; 

int main() 
{ 
    char numbers[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
      11, 12, 13, 14, 15, 16, 17 }; 
    char *ptrNumber; 
    ptrNumber = &numbers[0]; 

    // Address of first and last index 
    cout << (size_t)(ptrNumber) << " to " << (size_t)(ptrNumber + 17) << endl; 
} 

は、以前私は両方(size_t)(ptrNumber)(size_t)(ptrNumber+17)は1を印刷し、どこが間違っているつもりだことを意味し、char型へのポインタのサイズは1つのバイトを持っているだろうと思いましたか?ありがとう。

+0

これは 'sizeof'演算子ではなく、ポインタの値(メモリアドレス)を' size_t'という型にキャストしました(sizeofの戻り値の型です) – eavidan

+0

あなたの出力の上にコメントがあります。 'Address最初と最後のインデックスの 'それはあなたが印刷しているものです。それは割り当ての要求ですか? – lakeweb

+0

@lakeweb私はちょうどスライドからコードをコピーして貼り付けましたが、sizeofとsizeofを混同していたことが分かりました。 – IntegrateThis

答えて

2

印刷しようとしているのは、ポインタのサイズ(通常は4または8バイト)ではなく、ポインタが格納するアドレスです。したがって、プログラムは、最初と最後の要素が配置されているメモリアドレスを表示します。 size_tは、sizeof演算子を使用してここには何もありません。あなたはキャストだけを実行します。 size_tを削除すると、char配列で表される文字列が出力されます。しかし、あなたの配列は正当なC文字列(ゼロターミネーターと表示できない文字はありません)を表していないので、おそらくセグメンテーションフォールトで終わるでしょう。

+0

'char *' does coutに16進数を印字しないでください。 – Yakk

+0

@ヤクありがとう、訂正された、何らかの理由で 'char'の部分を逃した。 – vsoftco

1

charは1バイトですが、通常、文字とポインタは、マシンと環境に応じて32ビット(4バイト)または64ビット(8バイト)を占有します。それは最後のアドレスです。

関連する問題