Cha*_*unt 36 c++ arrays null pointers
如果将数组传递给另一个函数(未传递大小),是否可以确定数组的大小?该数组初始化为int array [] = {XXX} ..
我知道不可能做sizeof,因为它会返回指针的大小.我问的原因是因为我需要在传递数组的其他函数内运行for循环.我尝试过类似的东西:
for( int i = 0; array[i] != NULL; i++) {
........
}
Run Code Online (Sandbox Code Playgroud)
但我注意到在数组的近端,array [i]有时包含像758433这样的垃圾值,这不是数组初始化中指定的值.
Eva*_*ran 51
其他答案忽略了c ++的一个特征.您可以通过引用传递数组,并使用模板:
template <typename T, int N>
void func(T (&a) [N]) {
for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
int x[10];
func(x);
Run Code Online (Sandbox Code Playgroud)
但请注意,这仅适用于数组,而不适用于指针.
但是,正如其他答案所指出的那样,使用std::vector是更好的选择.
不,这是不可能的.
一种解决方法:在数组的最后一个值处放置一个特殊值,以便您可以识别它.
一个明显的解决方案是使用STL.如果不可能,最好明确传递数组长度.对于这种特殊情况,我对使用哨兵值技巧持怀疑态度.它对指针数组的效果更好,因为NULL对于标记是一个很好的值.对于整数数组,它并不那么容易 - 你需要有一个"神奇的"哨兵值,这是不好的.
旁注:如果您的数组已定义并初始化为
int array[] = { X, Y, Z };
Run Code Online (Sandbox Code Playgroud)
然后,在与循环相同的范围内
sizeof(array)将以字节为单位返回实际大小,而不是指针的大小.你可以得到数组长度
sizeof(array) / sizeof(array[0])
Run Code Online (Sandbox Code Playgroud)
但是,在一般情况下,如果将数组作为指针,则无法使用此技巧.
| 归档时间: |
|
| 查看次数: |
32515 次 |
| 最近记录: |