如果我像这样分配一个C数组:
int array[ 5 ];
Run Code Online (Sandbox Code Playgroud)
然后,只设置一个对象:
array[ 0 ] = 7;
Run Code Online (Sandbox Code Playgroud)
如何检查是否所有的其他键(array[1],array[2],...)的存储值?(在这种情况下,当然,他们不是.)
有像PHP这样的功能isset()吗?
if ( isset(array[ 1 ]) ) ...
Run Code Online (Sandbox Code Playgroud)
你不能
这些值都是未定义的(因此是随机的).
您可以明确地将所有值清零,以便至少有一个良好的起点.但是使用幻数来检测对象是否已被初始化被认为是不好的做法(但初始化变量被认为是好习惯).
int array[ 5 ] = {};
Run Code Online (Sandbox Code Playgroud)
但是如果你想明确检查它们是否已经被显式设置(不使用幻数),那么你需要将这些信息存储在另一个结构中.
int array[ 5 ] = {}; // Init all to 0
int isSet[ 5 ] = {}; // Init all to 0 (false)
int getVal(int index) {return array[index];}
int isSet(int index) {return isSet[index];}
void setVal(int index,int val) {array[index] = val; isSet[index] = 1; }
Run Code Online (Sandbox Code Playgroud)
C中没有这样的东西.静态数组的内容总是"设置".但是,您可以填写一些特殊值来假装它未初始化,例如
// make sure this value isn't really used.
#define UNINITIALIZED 0xcdcdcdcd
int array[5] = {UNINITIALIZED, UNINITIALIZED, UNINITIALIZED, UNINITIALIZED, UNINITIALIZED};
array[0] = 7;
if (array[1] != UNINITIALIZED) {
...
Run Code Online (Sandbox Code Playgroud)