更改指针不起作用的变量的值

  • 本文关键字:变量 不起作用 指针 c
  • 更新时间 :
  • 英文 :


基本上我有一个名为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;
}

标签.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 小时了,看不到解决方案。谢谢

看起来像一个小错误:

你用 NMAX 初始化minimum,我假设它是 8(数组的大小)。 99.9%的随机数会更大。因此,选择 8 作为最小值。

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

在 C 中,计算和参数传递的顺序是未定义的。

您当然可以自己订购,但这只是为了满足您的好奇心。

#include <stdio.h>
volatile char *message[] = {
    "fisrt", "second", "third", "fourth"
};
int print(size_t x)
{
    printf("%sn", message[x]);
    return x;
}
int main()
{
    printf("%d %d %d %dn", print(0), print(1), print(2), print(3));
    return 0;
}

注意。此规则有一个例外。

逻辑运算符从左到右计算。

if( x != NULL && *x == 5)是安全的,因为如果 x 为 NULL 则不会被取消引用

最新更新