C通过指针循环

时间:2014-04-28 14:52:30

标签: c arrays pointers

我正在尝试用C做一些简单的算法,但是由于指向数组的问题,我很快陷入困境。 我看过两个:

Loop through an array with pointers?

How to loop through a string created by pointer

C for loop through array with pointers

我不认为要么回答我的问题。 假设我想创建一个带有不确定长度数组的库函数作为参数:

void library_func(int* arr){
    //I want to loop through array. 
    while(some_condition){
       do_stuff(*arr);
       arr++;//increment pointer.
    }
}

我不知道我可以使用什么来为#34; some_condition"的不确定长度数组。从上面的一个答案中,似乎我使用了一个char数组,我可以取消引用指针并与' \ 0'进行比较。但是其他任何类型,包括结构?

2 个答案:

答案 0 :(得分:4)

我认为唯一的选择是:

void library_func(int* arr,size_t len){
    //I want to loop through array. 
    while(len){
       do_stuff(*arr);
       arr++;//increment pointer.
       len--;
    }
}

您所引用的用于字符串('\0')的选项是使用一些特殊的int来标记数组的结尾,但我强烈建议避免使用它。神奇的价值' \ 0'很容易被字符串接受,所有程序员都知道这一点,它是ascii 'nul'值,在字符串域中被接受为特殊值。对于整数,没有这样的概念。

当然,您可以按照下面的建议缩短代码。

答案 1 :(得分:0)

" \ 0" null终止符只是表示char字符串的结尾

要通过其他类型的数组循环,您必须提供长度。

void library_func(int* arr,int length){
//I want to loop through array. 
while(length){ // checking remaining arrays
   do_stuff(*arr);
   arr++;//increment pointer.
   length --;
   }

长度变量服务器检查剩余元素的数量。当它达到零时,它将不会进入循环。如果没有长度变量,循环会继续增加甚至超出数组的长度 - 取决于编译器可能会给出错误,而其他人可能会发出警告。这意味着在应用程序崩溃之前,循环可能永远不会存在