最佳实践:如何在C中遍历数组?

最佳实践:如何在C中遍历数组?,c,C,---编辑---数组以前被初始化为指针(*arr) 对于我试图解决的一个问题,我需要遍历一个大小可变的数组,并开始使用以下循环: int arr[] = {3, 5, 10, -2, -1, -3}; // Just an example int i = 0; while(arr[i]) { //do something i++; } 似乎在遍历我初始化的数组之后,代码会找到一些存储在内存中的随机值并继续计数,即使我尝试使用的数组早已被传递 我怎样才能避免这种情况 致以最

---编辑---数组以前被初始化为指针(*arr)

对于我试图解决的一个问题,我需要遍历一个大小可变的数组,并开始使用以下循环:

int arr[] = {3, 5, 10, -2, -1, -3}; // Just an example
int i = 0;

while(arr[i]) {

    //do something
    i++;

}
似乎在遍历我初始化的数组之后,代码会找到一些存储在内存中的随机值并继续计数,即使我尝试使用的数组早已被传递

我怎样才能避免这种情况


致以最良好的祝愿

int*arr
不是数组

int
不是应该用作索引的类型。改用
size\t

大堆
int-arr[50]你必须将数组的长度存储在某个地方,你的方法只是迭代超过数组的边界。为什么你认为在数组后面读取(它本身是未定义的行为,因此是邪恶的)应该导致循环结束?甚至在读了最后一篇法律文章之后?我不明白我想的问题。也许你可以解释一下你自己认为代码是如何工作的。特别是解释如何计算循环条件。问题中显示的代码无效。C.
int*arr
声明了一个指针,这意味着它应该由一个值初始化,该值应该是一个地址。编译器应该警告您初始值设定项的值太多,需要一个地址。如果没有,您应该在编译器中启用警告。如果有,你应该注意它们。如果这不是您实际试图编译的代码,那么应该显示真实的代码。提供一个例子,“代码发现内存中存储的一些随机值”这一事实表明您实际执行了一些代码,但这不是示例中所示的。你不能期望我们调试我们看不到的代码。太好了!这就是我要找的!