Arrays C如何遍历未知大小的函数int数组作为参数
我有以下代码:Arrays C如何遍历未知大小的函数int数组作为参数,arrays,c,pointers,while-loop,function-definition,Arrays,C,Pointers,While Loop,Function Definition,我有以下代码: intlist* create_list(int *arr) { intlist* l = malloc(sizeof(intlist)); while(*arr++) { l->sum += *arr; //*arr++; } return l; } void printl(intlist* l) { printf("%d\n", l->sum); } 当我在wh
intlist* create_list(int *arr) {
intlist* l = malloc(sizeof(intlist));
while(*arr++) {
l->sum += *arr;
//*arr++;
}
return l;
}
void printl(intlist* l) {
printf("%d\n", l->sum);
}
当我在while循环中打印*arr时,它会显示正确的值。问题是在我退出函数,创建_列表,并尝试访问列表的总和之后,它是完全错误的。例如,它不是1+2+3=6,而是类似于-123871239012。我做错了什么
我并不是在寻找一个传递数组大小的函数,因为在我看来和我的经验中,在大多数情况下,这是一种非常危险的方法。我不想传递数组的大小,因为如果我不小心写了1239123而不是1239122,我可能会做一些不好的事情。或者更糟糕的是,如果我继续写1239123而不是123912,在最后一个位置我没有按3,它将产生毁灭性的影响。一些错误:
while(*arr++) {
l->sum += *arr;
//*arr++;
}
您将在arr增量之后添加*arr
为了说明这个问题:
它必须是:
while(*arr) {
l->sum += *arr++;
//*arr++;
}
malloced内存未初始化,并且结构成员具有未确定的值—它可以是任何内容。在循环之前,您需要
l->sum = 0;
例如,数组必须以0结尾
int array[] = {1,2,3,4,5,6,0};
一些错误:
while(*arr++) {
l->sum += *arr;
//*arr++;
}
您将在arr增量之后添加*arr
为了说明这个问题:
它必须是:
while(*arr) {
l->sum += *arr++;
//*arr++;
}
malloced内存未初始化,并且结构成员具有未确定的值—它可以是任何内容。在循环之前,您需要
l->sum = 0;
例如,数组必须以0结尾
int array[] = {1,2,3,4,5,6,0};
函数create_list有两个问题 第一个问题是数据成员和没有初始化 第二个是由于while循环条件下的post增量,数组的第一个元素被忽略
while(*arr++) {
你至少应该写信
while(*arr) {
l->sum += *arr;
arr++;
}
请注意,在将控件传递给while循环之前,应检查是否已成功为intlist类型的对象分配了内存
函数要求数组包含sentinel值等于0的元素
如果该函数必须处理没有sentinel值元素的数组,则必须声明第二个参数,该参数将指定传递的数组中有多少元素
请注意,第一个参数应该具有限定符const,因为传递的数组在函数中没有更改
这就是函数应该声明为
intlist * create_list( const int *arr, size_t n );
函数create_list有两个问题 第一个问题是数据成员和没有初始化 第二个是由于while循环条件下的post增量,数组的第一个元素被忽略
while(*arr++) {
你至少应该写信
while(*arr) {
l->sum += *arr;
arr++;
}
请注意,在将控件传递给while循环之前,应检查是否已成功为intlist类型的对象分配了内存
函数要求数组包含sentinel值等于0的元素
如果该函数必须处理没有sentinel值元素的数组,则必须声明第二个参数,该参数将指定传递的数组中有多少元素
请注意,第一个参数应该具有限定符const,因为传递的数组在函数中没有更改
这就是函数应该声明为
intlist * create_list( const int *arr, size_t n );
我现在注意到,当我到达数组的末尾时,while循环并没有结束,而是继续了几个循环。我该如何解决这个问题?发布一个完整的程序,而不仅仅是它的片段。这是否回答了你的问题?我现在注意到,当我到达数组的末尾时,while循环并没有结束,而是继续了几个循环。我该如何解决这个问题?发布一个完整的程序,而不仅仅是它的片段。这是否回答了你的问题?我可以用非整数数据终止吗?我可能在一个数字数组中有一个0,或者我的列表中基本上可以有任何整数。我尝试添加一个NAN,并尝试在末尾添加一个\0,但没有成功。我是否可以使用非整数数据终止?我可能在一个数字数组中有一个0,或者我的列表中基本上可以有任何整数。我尝试添加一个NAN,并尝试在末尾添加一个\0,但没有成功。