web-dev-qa-db-fra.com

Vérifier la position du tableau pour null / vide

J'ai un tableau qui peut contenir des positions vides/nulles (par exemple: tableau [2] = 3, tableau [4] = vide/non affecté). Je veux vérifier dans une boucle si la position du tableau est nulle.

array[4]==NULL //this doesn't work

Je suis assez nouveau en C++.
Merci.


Modifier: voici plus de code; Un fichier d'en-tête contient la déclaration suivante

int y[50];

La population du tableau se fait dans une autre classe,

geoGraph.y[x] = nums[x];

Le tableau doit être vérifié pour null dans le code suivant;

    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

Si votre tableau n'est pas initialisé, il contient des valeurs aléatoires et ne peut pas être vérifié!

Pour initialiser votre tableau avec 0 valeurs:

int array[5] = {0};

Ensuite, vous pouvez vérifier si la valeur est 0:

array[4] == 0;

Lorsque vous comparez à NULL, il se compare à 0 car le NULL est défini comme une valeur entière 0 ou 0L.

Si vous avez un tableau de pointeurs, utilisez mieux la valeur nullptr pour vérifier:

char* array[5] = {nullptr}; // we defined an array of char*, initialized to nullptr

if (array[4] == nullptr)
    // do something
15
Geoffroy

Si le tableau contient des entiers, la valeur ne peut pas être NULL. NULL peut être utilisé si le tableau contient des pointeurs.

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 }

Comme http://en.cppreference.com/w/cpp/types/NULL déclare, NULL est une constante de pointeur nul !

3
Victor Sand

Vous pouvez utiliser boost :: optional ( optional ), qui a été développé en particulier pour la décision de votre problème:

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]);
      ....
   }
}

P.S. N'utilisez pas de tableau de type C -> utilisez std :: array ou std :: vector:

std::array<int, 50> y;   //not int y[50] !!!
2
SergV

Il n'y a pas de borne liée dans le tableau en programmation C. Si vous déclarez tableau comme

int arr[50];

Ensuite, vous pouvez même écrire comme

arr[51] = 10;

Le compilateur ne générera pas d'erreur. J'espère que ça répond à ta question.

0
vkulkarni