关于返回数组指针的函数

函数的代码如下:
int *cal(int *a,int num)
{
int digit=sizeof(a)/sizeof(int);
int *result=a;
int *b=(int *)calloc(digit+1,sizeof(int));
for(int i=0;i {
b[i+1]=(result[i]*num+b[i])/10;
result[i]=(result[i]*num+b[i])%10;
}
if(b[digit]>=1)
{
int *c=result;
digit++;
result=(int *)malloc(sizeof(int)*digit);
for(int two=0;two<digit-1;two++)
result[two]=c[two];
result[digit-1]=b[digit-1];
}
free(b);
return result;
}
这个代码是用来计算一个高位数乘以一个小于10的整数的。
如果以上代码我直接用没有任何问题。
但我在主函数中这样调用时却不对:
int *d=cal(a,4);
for(int three=0;three<4;three++)
printf("%d",d[three]);

难道这样不可以?懵逼了


把你在main函数里的代码贴出来,可能使用不对:
应该定义:int a[4];
并初始化。

#include"stdio.h"
#include"stdlib.h"
int *cal(int *a,int num)
{
int digit=sizeof(a)/sizeof(int);
int *result=a;
int *b=(int *)calloc(digit+1,sizeof(int));
for(int i=0;i {
b[i+1]=(result[i]*num+b[i])/10;
result[i]=(result[i]*num+b[i])%10;
}
if(b[digit]>=1)
{
int *c=result;
digit++;
result=(int *)malloc(sizeof(int)*digit);
for(int two=0;two<digit-1;two++)
result[two]=c[two];
result[digit-1]=b[digit-1];
}
free(b);
return result;
}
void main()
{
int a[4]={1,2,3,4};
int *d=cal(a,4);
for(int three=0;three<4;three++)
printf("%d",d[three]);
}

int digit=sizeof(a)/sizeof(int);
这句目的是想求数组元素个数,vc2010是实现不了。
一般都是传递数组地址和元素个数,需要两个参量。
#include"stdio.h"
#include"stdlib.h"
 int *cal(int *a,int n, int num)
{
    int digit=n;//sizeof(a)/sizeof(int);
    int *result=a;
    int *b=(int *)calloc(digit+1,sizeof(int));
    for(int i=0;i<digit;i++)
    {
        b[i+1]=(result[i]*num+b[i])/10;
        result[i]=(result[i]*num+b[i])%10;
    }
    if(b[digit]>=1)
    {
        int *c=result;
        digit++;
        result=(int *)malloc(sizeof(int)*digit);
        for(int two=0;two<digit-1;two++)
            result[two]=c[two];
        result[digit-1]=b[digit-1];
    }
    free(b);
    return result;
}
int main()
{
    int a[4]={1,2,2,1};
    int *d=cal(a,4,4);
    for(int three=0;three<4;three++)
        printf("%d",d[three]);
}

你的设计存在内存泄露的风险,当结果是5位数时。精简了一下,供参考:

 #include"stdio.h"
#include"stdlib.h"
int *cal(int *a,int digit, int num)
{
    int *b=(int *)calloc(digit+1,sizeof(int));
    for(int i=0;i<digit;i++)
    {
        b[i+1]=(a[i]*num+b[i])/10;
        b[i]=(a[i]*num+b[i])%10;
    }

    return b;
}
int main()
{
    int a[4]={4,2,2,4};
    int *d=cal(a,4,4);

    int m;
    if(d[4]) m=5;
    else m=4;
    for(int three=m-1;three>=0;three--)
        printf("%d",d[three]);
    free(d);
}