空/ヌルの位置を含む可能性のある配列があります(例:array [2] = 3、array [4] = empty/unassigned)。配列の位置がnullかどうかをループでチェックしたい。
array[4]==NULL //this doesn't work
私はC++を初めて使用します。
ありがとう。
編集:さらにコードを示します。ヘッダーファイルには次の宣言が含まれています
int y[50];
配列の移植は別のクラスで行われ、
geoGraph.y[x] = nums[x];
次のコードで配列のnullをチェックする必要があります。
int x=0;
for(int i=0; i<sizeof(y);i++){
//check for null
p[i].SetPoint(Recto.Height()-x,y[i]);
if(i>0){
dc.MoveTo(p[i-1]);
dc.LineTo(p[i]);
}
x+=50;
}
配列が初期化されていない場合、ランダム値が含まれており、チェックできません!
配列を0の値で初期化するには:
int array[5] = {0};
次に、値が0かどうかを確認できます。
array[4] == 0;
NULLと比較すると、NULLは整数値0または0Lとして定義されているため、0と比較されます。
ポインターの配列がある場合は、nullptr
値を使用して確認することをお勧めします。
char* array[5] = {nullptr}; // we defined an array of char*, initialized to nullptr
if (array[4] == nullptr)
// do something
配列に整数が含まれる場合、値をNULLにすることはできません。配列にポインターが含まれている場合は、NULLを使用できます。
SomeClass* myArray[2];
myArray[0] = new SomeClass();
myArray[1] = NULL;
if (myArray[0] != NULL) { // this will be executed }
if (myArray[1] != NULL) { // this will NOT be executed }
http://en.cppreference.com/w/cpp/types/NULL 状態として、NULLはnullポインター定数です!
Boost :: optional( optional )を使用できます。これは、特に問題の決定のために開発されました。
boost::optional<int> y[50];
....
geoGraph.y[x] = nums[x];
....
const size_t size_y = sizeof(y)/sizeof(y[0]); //!!!! correct size of y!!!!
for(int i=0; i<size_y;i++){
if(y[i]) { //check for null
p[i].SetPoint(Recto.Height()-x,*y[i]);
....
}
}
追伸Cタイプの配列を使用しないでください-> std :: arrayまたはstd :: vectorを使用してください:
std::array<int, 50> y; //not int y[50] !!!
Cプログラミングでは配列のバインドチェックはありません。配列を次のように宣言した場合
int arr[50];
その後、次のように書くこともできます
arr[51] = 10;
コンパイラーはエラーをスローしません。これがあなたの質問に答えることを願っています。