我有一个可能包含空/空位置的数组(例如:array [2] = 3,array [4] = empty / unassigned)。我想在循环中检查数组位置是否为空。
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 :(得分:14)
如果您的数组未初始化,则它包含randoms值,无法检查!
使用0值初始化数组:
int array[5] = {0};
然后你可以检查值是否为0:
array[4] == 0;
当您与NULL比较时,它将比较为0,因为NULL被定义为整数值0或0L。
如果你有一个指针数组,最好使用nullptr
值来检查:
char* array[5] = {nullptr}; // we defined an array of char*, initialized to nullptr
if (array[4] == nullptr)
// do something
答案 1 :(得分:3)
如果数组包含整数,则该值不能为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是空指针常量!
答案 2 :(得分:2)
您可以使用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]);
....
}
}
P.S。不要使用C型阵列 - &gt;使用std :: array或std :: vector:
std::array<int, 50> y; //not int y[50] !!!
答案 3 :(得分:0)
C编程中没有数组绑定检查。如果将数组声明为
int arr[50];
然后你甚至可以写为
arr[51] = 10;
编译器不会抛出错误。希望这能回答你的问题。