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语言中,
赋值,=
比较。不幸的是,=
条件中的赋值是有效的C:它将赋值,然后测试它,如果不是0或false,则输入子句。因此,iF
从不输入if(x=false)
子句。打开警告以纠正此类错误if
运算符不是幂运算符,而是按位异或运算符。使用浮点函数^
将数字pow(a,b)
提升为a
的幂。如果指数是已知的小整数,则通常最好显式编写乘法。因此,b
与pow(a,3)
呈现得更好a*a*a
- 分配内存时,请确保为所需类型留出足够的空间。也不要使用
d指针;他们指向的内存无效free
malloc(2)
分配2个字节;您需要malloc(2*sizeof(*numSet))
。但是如果您在本地需要2个整数,为什么不使用自动数组呢?您不能释放分配的内存,然后返回指向它的指针!首先,如果已释放内存块,main
将无法使用它。不确定这是否导致问题,因为我几乎无法读取它,但在C中,=
是赋值,而不是相等。您需要将if(something=something)
替换为if(something==something)
。新手错误;)这开始感觉像是一场考试。“找出代码中的十个错误。你发现的每一个错误都会得到一分。”看起来像是自下而上第三段(倒数第二段-为了莱弗勒的利益)中的一个错误格式问题。哦,是的,那些讨厌的反向引用。我通常会设法让一两个人歪着身子。感谢您更正函数调用。