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