malloc-关于返回数组指针的函数

问题描述

关于返回数组指针的函数

函数的代码如下:
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]);

难道这样不可以?懵逼了


解决方案

你的设计存在内存泄露的风险,当结果是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);
}

解决方案二:

把你在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]);
}

时间: 2024-09-15 01:22:27

malloc-关于返回数组指针的函数的相关文章

PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)_php实例

一.数组遍历的3个方法介绍 1. foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. #example1: 复制代码 代码如下: <?php $colors= array('red','blue','green','yellow'); foreach ($colorsas$color){ echo "Do you like $color? <br />"; } ?> 显示结果: Do you like red? Do you li

详解C++中的指针、数组指针与函数指针_C 语言

C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较严重的问题. 1.指针 程序中所有的变量和常量都存在一个内存地址中,当然,函数也有对应的内存地址,内存地址的不同会导致程序执行时有所不同. 指针就是用来控制和存储内存地址的变量,它指向单个对象的地址,除了void之外,指针的数据类型与所指向地址的变量数据类型保持一致. 2.如何定义指针.

C/C++中多维数组指针作为函数参数传递

注意此题的意思在于输入3个同4门课的成绩,计算出平均值和显示其中一个同学的4门课成绩,此例是对多维数组指针和多维数组的指针作为涵数参数传递的总结,认真联系和体会可以很好的了解多维数组指针的概念到底是什么! #include <stdio.h> main() { void search_score(); /* 定义自定义涵数类型为不返回型 */ void count_avg(); /* 定义自定义涵数类型为不返回型 */ static float a[3][4]={{97,45.5,66,77}

指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为参数,泛型函数

 1.指针数组    数组里面的每个元素都是指针.    指针数组的案例如下:    易犯错误: 2.数组指针   归根结底还是指针,只是取*的时候能够取出一整个数组出来. 数组指针:(一个指针指向了数组,一般和二维数组搭配使用). 下面的(p+1)表示的是加过20个字符.   3.函数指针: 在gcc编译的时候增加一些调试信息的方式是: gcc demo.c –g –o app   -g表示增加一些调试信息 objdump –dSsx app > file   将app反汇编,然后重定向到

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较

指针数组,数组指针,指针函数,函数指针,二级指针详解

先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型.所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组. char(*p

函数返回值 数组-C++函数可以返回数组吗?

问题描述 C++函数可以返回数组吗? 1,如果不可以,一定要返回指针的话(指针和数组的关系我知道),我拿到这个指针时也不知道究竟多少位数据是有效的啊,万一指针指到了数组外面怎么办?,2,还有,可不可以用typedef定义一个数组类型为新的类型名,然后作为返回类型?(我只知道类,结构体什么的都是可以作为返回类型的)

c语言-C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了。

问题描述 C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了. 下面是源码下载:http://pan.baidu.com/s/1dDhplwH 程序是用C语言写的,VS2013编译. 这是其中使用结构体的定义 这是哈夫曼函数的定义 解决方案 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0 , sizeof(--)): 解决方案二: 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0

php each 返回数组中当前的键值对并将数组指针向前移动一步实例_php实例

each函数返回数组中当前的键/值对并将数组指针向前移动一步 基本语法 array each ( array &$array ) 在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元.如果要再用 each 遍历数组,必须使用 reset() . 参数介绍: 参数 描述 array 必需.规定要使用的数组. each() 函数生成一个由数组当前内部指针所指向的元素的键名和键值组成的数组,并把内部指针向前移动. 返回值: 返回 array 数组中当前指