C语言中数组作为函数的参数以及返回值的使用简单入门

函数通过数组作为参数

如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收。类似的方式,可以使用多维数组形式参数。

方式-1
形式参数为指针如下。在下一章将学习什么是指针。

void myFunction(int *param)
{
.
.
.
}
方式-2
如下形式数组参数的大小:

void myFunction(int param[10])
{
.
.
.
}
方式-3
如下形式数组参数作为可变大小:

void myFunction(int param[])
{
.
.
.
}
例子
现在,考虑下面的函数,这将需要一个数组作为另一个参数,并根据传递的参数,它会返过数组数值的平均值,如下:

double getAverage(int arr[], int size)
{
 int  i;
 double avg;
 double sum;

 for (i = 0; i < size; ++i)
 {
  sum += arr[i];
 }

 avg = sum / size;

 return avg;
}

现在,让我们调用上面的函数如下:

 #include <stdio.h>

/* function declaration */
double getAverage(int arr[], int size);

int main ()
{
  /* an int array with 5 elements */
  int balance[5] = {1000, 2, 3, 17, 50};
  double avg;

  /* pass yiibaier to the array as an argument */
  avg = getAverage( balance, 5 ) ;

  /* output the returned value */
  printf( "Average value is: %f ", avg );

  return 0;
}

当上述代码被编译在一起并执行时,它产生了以下结果:

Average value is: 214.400000

正如所看到的,数组的长度并不重要,只要C语言函数不进行形式参数的边界检查。

函数返回数组
C语言编程不允许返回整个数组作为参数传递给函数。但是,可以通过指定数组名不带索引返回一个指针数组。如果想从一个函数返回一个一维数组,就必须声明返回一个指针,如在下面的例子中的函数:

int * myFunction()
{
.
.
.
}
第二点要记住的是,C语言不提倡局部变量的地址返回在函数之外,所以必须定义局部变量为静态变量。

现在,考虑下面的函数,将产生10个随机数字和使用数组返回它们,并调用这个函数如下:

#include <stdio.h>

/* 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
", i, r[i]);

 }

 return r;
}

/* main function to call above defined function */
int main ()
{
  /* a yiibaier to an int */
  int *p;
  int i;

  p = getRandom();
  for ( i = 0; i < 10; i++ )
  {
    printf( "*(p + %d) : %d
", i, *(p + i));
  }

  return 0;
}

当上述代码被编译在一起并执行时,它会产生导致一些如下:

r[0] = 313959809
r[1] = 1759055877
r[2] = 1113101911
r[3] = 2133832223
r[4] = 2073354073
r[5] = 167288147
r[6] = 1827471542
r[7] = 834791014
r[8] = 1901409888
r[9] = 1990469526
*(p + 0) : 313959809
*(p + 1) : 1759055877
*(p + 2) : 1113101911
*(p + 3) : 2133832223
*(p + 4) : 2073354073
*(p + 5) : 167288147
*(p + 6) : 1827471542
*(p + 7) : 834791014
*(p + 8) : 1901409888
*(p + 9) : 1990469526
(0)

相关推荐

  • C语言main函数的参数及其返回值详细解析

    返回值的作用 main函数的返回值用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出.下面我们在winxp环境下做一个小实验.首先编译下面的程序:int main( void ){    return 0;}然后打开附件里的"命令提示符",在命令行里运行刚才编译好的可执行文件,然后输入"echo%ERRORLEVEL%",回车,就可以看到程序的返回值为0.假设刚才编译好的文件是a.exe,如果输入&

  • C语言 用指针作为函数返回值详解

    C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include <stdio.h> #include <string.h> char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen(str2)){ return str1; }else{ return str2; } } int main(){ cha

  • 详解C语言函数返回值解析

    详解C语言函数返回值解析 程序一: int main() { int *p; int i; int*fun(void); p=fun(); for(i=0;i<3;i++) { printf("%d\n",*p); p++; } return 0; }; int* fun(void) { static int str[]={1,2,3,4,5}; int*q=str; return q; } //不能正确返回 虽然str是在动态变量区,而该动态变量是局部的,函数结束时不保留的.

  • C语言中数组作为函数的参数以及返回值的使用简单入门

    函数通过数组作为参数 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收.类似的方式,可以使用多维数组形式参数. 方式-1 形式参数为指针如下.在下一章将学习什么是指针. void myFunction(int *param) { . . . } 方式-2 如下形式数组参数的大小: void myFunction(int param[10]) { . . . } 方式-3 如下形式

  • golang数组和切片作为参数和返回值的实现

    目录 1. 数组作为参数和返回值时 1.1数组的定义 1.2数组作为参数和返回值的时候 2.切片作为参数和返回值 2.1 切片的定义初始化 2.2 切片的存储大致分为3部分 2.3 切片作为参数和返回值 2.4 append 切片动态增长的原理 2.5 copy 函数 通过赋值切片可以使得两个切片的数据不共享 3. 总结: 1. 数组作为参数和返回值时 1.1数组的定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型.字符串或者自定义类型 var

  • Python学习笔记之函数的参数和返回值的使用

    01.函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以相互结合,共有四种: 无参数 无返回值 无参数 有返回值 有参数 无返回值 有参数 有返回值 定义函数时候,是否接收参数,或者时候返回结果,是根据实际功能需求决定的. 如果函数内部处理的数据不确定,就可以将外界的数据以参数形式传递到函数内部. 如果希望一个函数执行完成后,向外界汇报执行结果,就可以增加函数的返回值. 02.函数的返回值-进阶 在程序开发中,有时候,会希望一个函数执行结束后,告诉调用者一个结果,以便调用者针

  • Python 函数用法简单示例【定义、参数、返回值、函数嵌套】

    本文实例讲述了Python 函数用法.分享给大家供大家参考,具体如下: demo.py(函数定义): # say_hello() # 不能在定义函数之前调用函数 # Python 解释器知道下方定义了一个函数 def say_hello(): """函数的说明文档""" print("hello 1") print("hello 2") print("hello 3") print(&q

  • C语言中数组的一些基本知识小结

    初始化数组 int ages[3] = {4, 6, 9}; int nums[10] = {1,2}; // 其余的自动初始化为0 int nums[] = {1,2,3,5,6}; // 根据大括号中的元素个数确定数组元素的个数 int nums[5] = {[4] = 3,[1] = 2}; // 指定元素个数,同时给指定元素进行初始化 int nums[3]; nums[0] = 1; nums[1] = 2; nums[2] = 3; // 先定义,后初始化 定义但是未初始化,数组中有

  • C语言中实现itoa函数的实例

    C语言中实现itoa函数的实例 一.原型: char *itoa( int value, char *string,int radix); 二.函数说明: value:欲转换的数据. string:目标字符串的地址. radix:转换后的进制数,可以是10进制.16进制等. 三.函数简单实现: #include <iostream> #include <string> using namespace std; char* My_itoa(int value,char str[],i

  • C语言中随机数rand()函数详解

      在生活中很多场景下都需要产生随机数,比如抽奖,打牌,游戏等场景下就需要使用随机数.在C语言标准库函数里面有专门用来产生随机数的函数rand,它的函数原型如下: int __cdecl rand(void);   rand函数没有参数,它的返回值就是随机数.下面通过一个简单的例子来测试一下rand函数. #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int i; i = rand(

  • C语言中如何获取函数内成员的值你知道吗

    目录 C语言中如何获取函数内成员的值 通过函数返回值获取函数内部的情况 通过变量降级(传地址)获取函数内部的情况 总结 C语言中如何获取函数内成员的值 引言:函数作为实现 C 程序功能模块的主要载体,可以将功能的实现细节封装在函数内部.这对于实现模块化的编程带来了便利,让指定功能的复用性也变得更好.但“封装”除带来上述好处外,也导致访问函数内部细节的不太方便,为了了解函数内部的情况,我们讨论如何对函数进行拆包,即获取函数内部的信息. 通过函数返回值获取函数内部的情况 int get_the_va

  • 浅析Go语言中数组的这些细节

    目录 Go语言基础二 len&cap 二维数组的遍历 数组的拷贝与传参 求数组所有元素之和 例题:数组元素匹配问题 今日总结 Go语言基础二 len&cap 书接上文,我们提到二维数组中的第二个维度的数组不能用...来表示,接下来我们要认识两个新的函数,它们分别是len和cap package main ​ func main() { a := [2]int{} println(len(a), cap(a)) } 由上方代码可知,我们在main函数里面定义了一个a数组,长度为2,未进行初始

随机推荐