web-dev-qa-db-ja.com

null /空の配列位置を確認してください

空/ヌルの位置を含む可能性のある配列があります(例: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;
    }
12
Madz

配列が初期化されていない場合、ランダム値が含まれており、チェックできません!

配列を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
15
Geoffroy

配列に整数が含まれる場合、値を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ポインター定数です

3
Victor Sand

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] !!!
2
SergV

Cプログラミングでは配列のバインドチェックはありません。配列を次のように宣言した場合

int arr[50];

その後、次のように書くこともできます

arr[51] = 10;

コンパイラーはエラーをスローしません。これがあなたの質問に答えることを願っています。

0
vkulkarni