C++ 检查数组位置是否为空/空
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19132411/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Check array position for null/empty
提问by Madz
I have an array which might contain empty/null positions (e.g: array[2]=3, array[4]=empty/unassigned). I want to check in a loop whether the array position is null.
我有一个可能包含空/空位置的数组(例如:array[2]=3,array[4]=empty/unassigned)。我想在循环中检查数组位置是否为空。
array[4]==NULL //this doesn't work
I'm pretty new to C++.
Thanks.
我对 C++ 很陌生。
谢谢。
Edit: Here's more code;
A header file contains the following declaration
编辑:这里有更多代码;头文件包含以下声明
int y[50];
The population of the array is done in another class,
数组的填充是在另一个类中完成的,
geoGraph.y[x] = nums[x];
The array should be checked for null in the following code;
应在以下代码中检查数组是否为空;
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;
}
回答by Geoffroy
If your array is not initialized then it contains randoms values and cannot be checked !
如果您的数组未初始化,则它包含随机值且无法检查!
To initialize your array with 0 values:
用 0 值初始化数组:
int array[5] = {0};
Then you can check if the value is 0:
然后您可以检查该值是否为 0:
array[4] == 0;
When you compare to NULL, it compares to 0 as the NULL is defined as integer value 0 or 0L.
当您与 NULL 进行比较时,它与 0 进行比较,因为 NULL 被定义为整数值 0 或 0L。
If you have an array of pointers, better use the nullptr
value to check:
如果您有一个指针数组,最好使用该nullptr
值来检查:
char* array[5] = {nullptr}; // we defined an array of char*, initialized to nullptr
if (array[4] == nullptr)
// do something
回答by Victor Sand
If the array contains integers, the value cannot be NULL. NULL can be used if the array contains pointers.
如果数组包含整数,则该值不能为 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 }
As http://en.cppreference.com/w/cpp/types/NULLstates, NULL is a null pointer constant!
正如http://en.cppreference.com/w/cpp/types/NULL所述,NULL 是一个空指针常量!
回答by SergV
You can use boost::optional
(or std::optional
for newer versions), which was developed in particular for decision of your problem:
您可以使用boost::optional
(或std::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. Do not use C-type array -> use std::array or std::vector:
PS 不要使用 C 类型数组 -> 使用 std::array 或 std::vector:
std::array<int, 50> y; //not int y[50] !!!
回答by vkulkarni
There is no bound checking in array in C programming. If you declare array as
在 C 编程中没有对数组进行边界检查。如果您将数组声明为
int arr[50];
Then you can even write as
然后你甚至可以写成
arr[51] = 10;
The compiler would not throw an error. Hope this answers your question.
编译器不会抛出错误。希望这能回答你的问题。