改变一个变量的指针不工作的价值

问题描述 投票:0回答:2

基本上我有一个称为MinSubTab函数是应该计算通过了阵列之和也改变,而无需使用返回从在函数内部中的第一个参数传递的值。这是用指针来完成。无论如何,我觉得这是比较容易,如果我刚才给你的代码,所以在这里它是:

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;
}

因此,这里预期的结果是该总和被印刷(它是),并且打印的阵列的最小值(它是不是)。每一次的分变量等于8,我已经不知道如何真正从该函数内改变最小的值。

请帮助我的大脑有理性思维没有更多的能力,它已经1.5小时,看不到解决方案。谢谢

c
2个回答
1
投票

看起来像一个小错误:

初始化minimumNMAX,我假设为8(数组的大小)。随机数的99.9%,将是更大的。所以8被选择为最小。

你真正想要的是RAND_MAX初始化它 - 最大值rand()可以返回。


0
投票

在评估和参数传递的Ç顺序是不确定的。

你当然也可以命令自己,但它只能养活你的好奇心。

#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)is安全的,因为如果是NULL x将不会被取消引用

© www.soinside.com 2019 - 2024. All rights reserved.