size_t、ptrdif_t

2511 ワード

http://longzxr.blog.sohu.com/196837377.html
同じ配列のarr[5]に指し示す2つのポインタの差の検証:
     配列は以下の通りです.ptr=arr.

---------------------------------------------------
int_tmain(int argc,_TCHAR*argv[])
{
char arr[5]={1,2,3,4,5}
char*ptr=arr
printf("%d"、&ptr[4]-&ptr[0]);
system("PAUSE")
return 0;
)
---------------------------------------------------
 
運転出力:4
 
文字配列に変換します.テスト結果は同じです.
「Cとポインタ」P 110は、以下のように分析しています.2つのポインタが減算された結果のタイプは、ptrdif_です.tは記号付きの整数タイプです.減算の値は2つのポインタのメモリ内の距離(バイトではなく配列要素の長さで)です.減算の結果、配列要素タイプの長さで除算されます.したがって、この結果は配列に格納されている要素の種類とは無関係である.
 
似たようなタイプがあります.(ここですをクリックして)
size_tはunsignedタイプで、配列長を指定するか、または下付きを指定するために、正の数でなければなりません.std:size_t.デザインsize_tは、複数のプラットフォームに適応するために、様々なプラットフォームにおけるプログラムの移植性を強化するために導入される.
ptrdif_tは、同じ配列の中の2つのポインタの間の差を保存するためのsignedタイプで、負の数、stdを使用できます.t.同上、ptrdif_を使用するtはプラットフォームから独立したアドレス差分を取得する.
size_typeはunsignedタイプで、容器の中の元素の長さまたは下付きを表しています.vector:size_type i=0;
ディfferencetypeはsignedタイプで、ディレクタの差を表します.vector<int>:difference_type=iter 1-iter 2.
前二者は標準クラスのstd内にあり、後二者はSTL対象のものである.
//=========================================================================================================================================
http://blog.csdn.net/yyyzlf/article/details/6209935
C and C++define a special type for pointer arthmetic,namely ptrdif_t,which is a typedef of a plotform-specific signed integral type.You can use a variable of type ptrdif_t to store the resubtracting and adding pointers.For example:
  #include <stdlib.h> int main() { int buff[4]; ptrdiff_t diff = (&buff[3]) - buff; // diff = 3 diff = buff -(&buff[3]); // -3 } 
What are the advantages of using ptrdif_tですかFirst,the name ptrdif_t is self-documenting and helps the reader understand that the variable is used in pointerrithmetic.Secondly,ptrdif_t is potable:its undering type may vary acros ploteforms、but you don't need to make changes in the code when portting it.