基本上,我有一个名为MinSubTab的函数,该函数应该计算传递的数组的总和,并且还可以在不使用return的情况下从函数内部更改在第一个参数中传递的值。这是通过指针完成的。无论如何,我觉得这是比较容易,如果我刚才给你的代码,所以这里是:
maintab.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "tab.h"
int main(){
int *reftab;
int min;
reftab = (int *)malloc(sizeof(int) * NMAX);
InitTab(reftab,NMAX);
printf("\n Total: %d et min: %d", MinSumTab(&min, reftab, NMAX), min);
free(reftab);
return 0;
}
tab.c
void InitTab(int *tab, int size){
srand(time(NULL));
for (int i=0; i<size; i++){
*(tab+i) = rand() % 10;
}
}
int MinSumTab(int *min, int *tab, int size){
int total=0;
int minimum = NMAX;
int temp = *min;
for (int i=0; i<size; i++){
total += *(tab+i);
}
for (int i=0; i<size; i++){
if(*(tab+i)<minimum){
minimum = *(tab+i);
}
}
*min = minimum;
return total;
}
因此,这里预期的结果是该总和被印刷(它是),并且打印的阵列的最小值(它是不是)。每一次min变量等于8,我不知道如何从该函数中实际更改min的值。
请帮助我,因为我的大脑不再有理性思考的能力,已经1.5个小时了,看不到解决方案。谢谢
答案 0 :(得分:1)
看起来像一个小错误:
您用minimum
初始化NMAX
,我假设它是8(数组的大小)。 99.9%的随机数会更大。所以8被选择为最小。
您真正想要的是使用RAND_MAX
对其进行初始化-rand()
可以返回最大值。
答案 1 :(得分:0)
评估和参数传递的在C顺序是不确定的。
您当然可以自己下订单,但这只能满足您的好奇心。
#include <stdio.h>
volatile char *message[] = {
"fisrt", "second", "third", "fourth"
};
int print(size_t x)
{
printf("%s\n", message[x]);
return x;
}
int main()
{
printf("%d %d %d %d\n", print(0), print(1), print(2), print(3));
return 0;
}
注意。有从这个规则一个例外。
逻辑运算符从左到右评估。
if( x != NULL && *x == 5)
是安全的,因为x如果为NULL则不会被取消引用