C语言中函数返回数组

C语言中函数返回数组

C语言中函数返回数组

上一页

下一页

C语言中的函数有助于程序员采用模块化程序设计。函数可以定义为接受一个或多个参数,它能够返回单个值到调用环境。但是,函数可以定义为返回一个值的数组。在C语言中,可以通过以下方法之一使函数返回数组:

将数组作为参数传递并返回指针

在函数中声明一个静态数组并返回其指针

使用malloc() 函数

将数组嵌入到结构体变量中并将其传递给函数

我们使用这些方法来计算给定数字的平方、立方和平方根。

按引用传递数组

在下面的示例中,我们在main()中声明了一个未初始化的数组,并将其与一个整数一起传递给函数。在函数内部,数组被填充了平方、立方和平方根。该函数返回此数组的指针,使用该指针,可以在 main() 函数中访问和打印这些值。

示例

#include

#include

int arrfunction(int, float *);

int main(){

int x=100;

float arr[3];

arrfunction(x, arr);

printf("Square of %d: %f\n", x, arr[0]);

printf("cube of %d: %f\n", x, arr[1]);

printf("Square root of %d: %f\n", x, arr[2]);

return 0;

}

int arrfunction(int x, float *arr){

arr[0]=pow(x,2);

arr[1]=pow(x, 3);

arr[2]=pow(x, 0.5);

}

输出

Square of 100: 10000.000000

cube of 100: 1000000.000000

Square root of 100: 10.000000

返回静态数组

而不是从 main() 传递一个空数组,我们可以在被调用函数本身内部声明一个数组,用所需的值填充它,并返回其指针。但是,返回局部变量的指针是不可接受的,因为它指向一个不再存在的变量。请注意,局部变量在其函数的作用域结束时将不复存在。因此,我们需要在被调用函数 (arrfunction) 内部使用静态数组,并将它的指针返回给 main()。

示例

#include

#include

float * arrfunction(int);

int main(){

int x=100, i;

float *arr = arrfunction(x);

printf("Square of %d: %f\n", x, *arr);

printf("cube of %d: %f\n", x, arr[1]);

printf("Square root of %d: %f\n", x, arr[2]);

return 0;

}

float *arrfunction(int x){

static float arr[3];

arr[0]=pow(x,2);

arr[1]=pow(x, 3);

arr[2]=pow(x, 0.5);

return arr;

}

输出

Square of 100: 10000.000000

cube of 100: 1000000.000000

Square root of 100: 10.000000

现在,考虑以下函数,它将生成 10 个随机数并使用数组返回它们,并按如下方式调用此函数:

示例

#include

#include

#include

/* function to generate and return random numbers */

int * getRandom( ) {

static int r[10];

int i;

/* set the seed */

srand( (unsigned)time( NULL ) );

for ( i = 0; i < 10; ++i) {

r[i] = rand();

printf( "r[%d] = %d\n", i, r[i]);

}

return r;

}

/* main function to call above defined function */

int main () {

/* a pointer to an int */

int *p;

int i;

p = getRandom();

for ( i = 0; i < 10; i++ ) {

printf( "*(p + %d) : %d\n", i, *(p + i));

}

return 0;

}

当以上代码编译并执行时,会产生以下结果:

输出

r[0] = 2110147662

r[1] = 1427553496

r[2] = 1243625529

r[3] = 857484361

r[4] = 513293736

r[5] = 964923407

r[6] = 36104419

r[7] = 1248464892

r[8] = 1838450240

r[9] = 2096489563

*(p + 0) : 2110147662

*(p + 1) : 1427553496

*(p + 2) : 1243625529

*(p + 3) : 857484361

*(p + 4) : 513293736

*(p + 5) : 964923407

*(p + 6) : 36104419

*(p + 7) : 1248464892

*(p + 8) : 1838450240

*(p + 9) : 2096489563

使用 malloc() 函数

malloc() 函数作为库函数在stdlib.h 头文件中可用。它在程序运行时动态分配一块内存。变量的正常声明会导致内存在编译时分配。

void *malloc(size_t size);

malloc() 函数返回一个泛型 void 指针。要在分配的内存中分配某种数据类型的值,必须将其强制转换为所需的类型。例如,要存储 int 数据,必须将其强制转换为 int *,如下所示:

int *x = (int *)malloc(sizeof(int);

让我们分配一块足以存储三个 float 值的内存,这三个 float 值对应于一个数字的平方、立方和平方根,并将 float 指针返回给 main(),在 main() 中显示计算出的值。

示例

#include

#include

#include

float * arrfunction(int);

int main(){

int x=16, i;

float *arr = arrfunction(x);

printf("Square of %d: %f\n", x, arr[0]);

printf("cube of %d: %f\n", x, arr[1]);

printf("Square root of %d: %f\n", x, arr[2]);

return 0;

}

float *arrfunction(int x){

float *arr = (float *)malloc(3*sizeof(float));

arr[0]=pow(x,2);

arr[1]=pow(x, 3);

arr[2]=pow(x, 0.5);

return arr;

}

输出

Square of 16: 256.000000

cube of 16: 4096.000000

Square root of 16: 4.000000

在结构体中使用数组元素

在这种方法中,我们将声明一个结构体,其中包含一个 float 数组作为其元素。被调用函数 (myfunction) 声明一个结构体变量,用接收到的参数的平方、立方和平方根填充数组元素,并将其返回给 main() 函数。

示例

#include

#include

struct mystruct{

float arr[3];

};

struct mystruct myfunction(int x);

int main(){

int x = 9;

struct mystruct s = myfunction(x);

printf("Square of %d: %f\n", x, s.arr[0]);

printf("cube of %d: %f\n", x, s.arr[1]);

printf("Square root of %d: %f\n", x, s.arr[2]);

return 0;

}

struct mystruct myfunction(int x){

struct mystruct s1;

s1.arr[0]=pow(x,2);

s1.arr[1]=pow(x,3);

s1.arr[2]=pow(x, 0.5);

return s1;

}

输出

Square of 9: 81.000000

cube of 9: 729.000000

Square root of 9: 3.000000

从函数返回字符串

使用相同的方法,您可以将字符串传递给函数并从函数返回字符串。C语言中的字符串是 char 类型的数组。在下面的示例中,我们使用指针传递字符串,在函数内部操作它,然后将其返回给 main()。

在被调用函数内部,有一个局部字符串。在返回之前,传递的字符串与局部字符串连接。

示例

#include

#include

#include

char * hellomsg(char *);

int main(){

char * name = "TutorialsPoint";

char *arr = hellomsg(name);

printf("%s\n", arr);

return 0;

}

char * hellomsg(char *x){

char *arr = (char *)malloc(50*sizeof(char));

strcpy(arr, "Hello ");

strcat(arr, x);

return arr;

}

输出

Hello TutorialsPoint

打印页面

上一页 下一页

广告

相关推荐

不小心把微信好友删除了怎么办?如何恢复找回
手机app足球365现金

不小心把微信好友删除了怎么办?如何恢复找回

📅 08-23 👁️ 1650
用西药名起网名 汇总34个
0755 36553288

用西药名起网名 汇总34个

📅 08-16 👁️ 8013
基金赎回多久可以到账,几点可以回到账户上?
beat365在线登录app

基金赎回多久可以到账,几点可以回到账户上?

📅 09-01 👁️ 5407