如何检查c中是否"设置"

pop*_*850 6 c arrays int

如果我像这样分配一个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)

Mar*_*ork 6

你不能

这些值都是未定义的(因此是随机的).

您可以明确地将所有值清零,以便至少有一个良好的起点.但是使用幻数来检测对象是否已被初始化被认为是不好的做法(但初始化变量被认为是好习惯).

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)


ken*_*ytm 6

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)