我正在尝试用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'进行比较。但是其他任何类型,包括结构?
答案 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 --;
}
长度变量服务器检查剩余元素的数量。当它达到零时,它将不会进入循环。如果没有长度变量,循环会继续增加甚至超出数组的长度 - 取决于编译器可能会给出错误,而其他人可能会发出警告。这意味着在应用程序崩溃之前,循环可能永远不会存在