2016-07-17 6 views
-1

Cのすべてのポインタが同じサイズであるのはなぜですか?私は64ビットアーチを使っています。なぜポインタが同じサイズのCである

#include<stdio.h> 

int main(){ 
printf("int\t%ld\n",sizeof(int*)); 
printf("char\t%ld\n",sizeof(char*)); 
printf("void\t%ld\n",sizeof(void*)); 
printf("float\t%ld\n",sizeof(float*)); 
} 

OP : 
int  8 
char 8 
void 8 
float 8 
+1

なぜ同じサイズではないのですか? –

+0

これらは同じサイズであることは保証されていませんが、通常は常に次のとおりです。http://stackoverflow.com/questions/1241205/are-all-data-pointers-the-same-size-in-one-platform-for-all- data-types – SurvivalMachine

+1

それらのうちの1つが小さいサイズを持つと仮定すると、そのタイプのものがメモリ内に存在することが許可されている場所に大きな制限があります。 – harold

答えて

3

あなたが必要とするすべては、64個のインデックスビットのメモリアドレスとあなただけのインデックスにメモリアドレス(メモリ内の指定されたデータ「開始」)を必要とするリストアップしましたすべてのデータタイプですので。これはC言語にも当てはまりますが、C++では、例えばメンバー関数ポインタがそれ以上であることに注意してください。

+0

はい、それらはすべてメモリアドレスを指しています。 int charなどのデータ型が異なる理由は、Cコンパイラがポインタ演算を行うためです。たとえば、 'char'ポインタを追加すると、次のバイトを示す1だけインクリメントし、 'int'は4つインクリメントします。 – Nishant

+1

@Nishant:それは理由の結果ですが、理由はありません。理由があったならば、 'sizeof(T)== sizeof(U)'となる 'T'と' U'の場合、 'T *'は 'U *'と同じであると言えるかもしれません。明らかにそうではない例異なる構造体。その理由は、型の安全性と、逆参照演算子が明確で特定の戻り型を持つ必要があるためです。その結果、コンパイラは意味のあるポインタ演算を行うことができます。 – lorro

関連する問題