C语言中的内存分配和传递多个数字

C语言中的内存分配和传递多个数字,c,memory,dynamic,allocation,C,Memory,Dynamic,Allocation,我很难弄清楚我是如何完成一项任务的,我正在寻求帮助 因此,我需要使用一个函数来查找满足条件的一对数字(动态分配),并返回指向它的指针 以下是我所拥有的: int* f_cubes_sum(int n) { //Declaring array int *numSet; numSet = (int *)malloc(2); // Only two because I'm looking for a pair //Declaring variables int

我很难弄清楚我是如何完成一项任务的,我正在寻求帮助

因此,我需要使用一个函数来查找满足条件的一对数字(动态分配),并返回指向它的指针

以下是我所拥有的:

int* f_cubes_sum(int n)
{
    //Declaring array
    int *numSet;
    numSet = (int *)malloc(2); // Only two because I'm looking for a pair
    //Declaring variables
    int sum = 0;
    int a = 0;
    int b = 0;
    bool results = false;



    while (b < n && results == false)
    {
        while (a < n)
        {
            sum = a^3 + b^3;
            if (sum == n)
            {
                results = true;
            }
            else
            {
                a = a + 1;
            }

            sum = 0;
        }

        if (results = false)
        {
            a = 0;
            b = b + 1;
        }
    }

    if (results = false)
    {
        a = NULL;
        b = NULL;

    }

    numSet[0] = a;
    numSet[1] = b;
    free(numSet);
    return numSet;
}
int*f\u立方体和(int n)
{
//声明数组
int*numSet;
numSet=(int*)malloc(2);//只有两个,因为我正在寻找一对
//声明变量
整数和=0;
int a=0;
int b=0;
bool结果=假;
而(b
在我的主要功能中,如何访问这两个数字


感谢您的时间

您正在寻找一个函数,该函数确定一个数字是否可以写入两个立方体的总和,如果可以,它应该生成两个立方体相加的数字。基本上你需要:

  • 关于
    n
    是否可以写成
    a³+b³的信息
  • 如果是,则显示
    a
    b
    的值
您可以使用分配两个整数数组的方法,并在成功时返回该数组,在失败时返回
NULL
。如果这样做,则只有在得到以下结果时才应分配数组:

int *f_cubes_sum(int n)
{
    int a, b;

    // logic to work out whether a³ + b³ == n
    if (a*a*a + b*b*b == sum) {
        int *res = malloc(2 * sizeof(*res));

        res[0] = a;
        res[1] = b;

        return res;
    }

    // no solution found
    return NULL;
}
这里的缺点是调用代码必须释放返回的指针:

int *res = f_cubes_sum(2778);

if (res) {
    printf("%d, %d\n", res[0], res[1]);
    free(res);
}
另一种方法是传入代码必须填充的数组,并用布尔返回值指示成功或失败:

bool f_cubes_sum(int n, int res[2])
{
    int a, b;

    // logic to work out whether a³ + b³ == n
    if (a*a*a + b*b*b == sum) {
        res[0] = a;
        res[1] = b;

        return true;
    }

    // no solution found
    return false;
}
现在,调用代码必须为结果提供空间:

int res[2];

if (f_cubes_sum(2778, res)) {
    printf("%d, %d\n", res[0], res[1]);
}
当然,因为您总是处理两个可能的结果值,所以您也可以传递指向这些值的指针,而不是传递数组。下面是函数的一个变体,它可以执行以下操作:

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

bool f_cubes_sum(int n, int *pa, int *pb)
{
    int a = 0;

    while (1)
    {
        int a3 = a*a*a;

        if (a3 > n) break;

        int b = cbrt(n - a3) + 0.5;
        int b3 = b*b*b;

        if (a3 + b3 == n) {
            *pa = a;
            *pb = b;
            return true;
        }

        a++;
    }

    return false;
}

int main(void)
{
    int a, b;
    int n = 35001;

    if (f_cubes_sum(n, &a, &b)) {
        printf("%d^3 + %d^3 == %d\n", a, b, n);
    } else {
        printf("Nothing found for %d.\n", n);
    }

    return 0;
}
#包括
#包括
#包括
bool f_cubes_sum(int n,int*pa,int*pb)
{
int a=0;
而(1)
{
int a3=a*a*a;
如果(a3>n)断裂;
INTB=cbrt(n-a3)+0.5;
int b3=b*b*b;
如果(a3+b3==n){
*pa=a;
*pb=b;
返回true;
}
a++;
}
返回false;
}
内部主(空)
{
INTA,b;
int n=35001;
if(f_cubes_sum(n,a,b)){
printf(“%d^3+%d^3==%d\n”,a,b,n);
}否则{
printf(“找不到%d的任何内容。\n”,n);
}
返回0;
}
还要注意评论家们指出的:

  • 在C语言中,
    =
    赋值,
    =
    比较。不幸的是,
    iF
    条件中的赋值是有效的C:它将赋值,然后测试它,如果不是0或false,则输入子句。因此,
    if(x=false)
    从不输入
    if
    子句。打开警告以纠正此类错误

  • ^
    运算符不是幂运算符,而是按位异或运算符。使用浮点函数
    pow(a,b)
    将数字
    a
    提升为
    b
    的幂。如果指数是已知的小整数,则通常最好显式编写乘法。因此,
    pow(a,3)
    a*a*a
    呈现得更好

  • 分配内存时,请确保为所需类型留出足够的空间。也不要使用
    free
    d指针;他们指向的内存无效


malloc(2)
分配2个字节;您需要
malloc(2*sizeof(*numSet))
。但是如果您在本地需要2个整数,为什么不使用自动数组呢?您不能释放分配的内存,然后返回指向它的指针!首先,如果已释放内存块,
main
将无法使用它。不确定这是否导致问题,因为我几乎无法读取它,但在C中,
=
是赋值,而不是相等。您需要将
if(something=something)
替换为
if(something==something)
。新手错误;)这开始感觉像是一场考试。“找出代码中的十个错误。你发现的每一个错误都会得到一分。”看起来像是自下而上第三段(倒数第二段-为了莱弗勒的利益)中的一个错误格式问题。哦,是的,那些讨厌的反向引用。我通常会设法让一两个人歪着身子。感谢您更正函数调用。