测试数组作为参数传递给函数,在函数中访问和修改。并且,这表明C语言的数组作为参数传递给函数时,是作为引用方式传递的。
    还有,在传递的时候,还需要把数组的大小也一并传递给函数。因为只传递数组给函数,进而想要在函数中获得数组大小,在网上搜了一下,答案居然是“No way”……

另外,如果函数的原型是void function(int array[],int c),但是function(array[],i);的写法却引发了syntax error,看来这么着是不行的。改为function(array,i);却没有问题。这也从另一个角度验证了按引用传递的解法
    代码在此:
------------------------------------------------------------------------------------------------------
 /*
an unknown-length-array as a parameter of the function
*/

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

//the function accepted an array as a parameter,show the array.
void ShowArray(int array[],int c)
 {
  puts("\nNow output the array:\n");
  int i;
  for(i=0;i<c;i++)
   {
    printf("%3d is %5d.\n",i,array[i]);
   }
 }//end ShowArray

//the function accepted an array as a parameter,modify the array.
void ModifyArray(int array[],int c)
 {
  puts("\nNow you can modify the array:\n");
  int i;
  for(i=0;i<c;i++)
   {
    printf("input the %d element of the array:\n",i);
    scanf("%d",&(array[i]));
   }
 }//end ModifyArray

//main program here
main()
{
 puts("\nInput your array count:\n");
 int i;
 scanf("%d",&i);
 int array[i];
 
 //ShowArray(array[],i);//syntax error before ']' token
 ShowArray(array,i);
 
 ModifyArray(array,i);
 
 ShowArray(array,i);
}//end main

/*
output:

D:\C_test>unknownArrayParameter.exe

Input your array count:

5

Now output the array:

0 is 2293536.
  1 is 4199472.
  2 is 2293728.
  3 is 2009095316.
  4 is 2008958752.

Now you can modify the array:

input the 0 element of the array:
1
input the 1 element of the array:
2
input the 2 element of the array:
3
input the 3 element of the array:
4
input the 4 element of the array:
5

Now output the array:

0 is     1.
  1 is     2.
  2 is     3.
  3 is     4.
  4 is     5.

D:\C_test>
*/

-----------------------------------------------------------------------------------------------------

但是,简单类型,如int,在传递给函数的时候是按值传递的,即,传递给函数的是这个变量的值(变量的副本),并不是变量本身(变量的存储地址)。相对的,函数内对于变量的改变也只限于函数内部。也就是说,变量没有真正的被改变。一下程序做了验证。
    代码:
---------------------------------------------------------------------------------------------------

/*
to look up passing a parameter by value
*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

//the exchange function
void ExchangeBy(int x,int y)
 {
  int temp;
  temp=x;
  x=y;
  y=temp;
 }//end ExchangeBy

//main program here
main()
{
 puts("\nenter you two numbers:\n");
 int x;
 puts("input x:\n");
 scanf("%d",&x);
 int y;
 puts("input y:\n");
 scanf("%d",&y);
 
 ExchangeBy(x,y);
 
 puts("After exchange function:\n");
 printf("x is %d,y is %d.",x,y);
}//end main

/*
Output here:

D:\C_test>passingParameterByvalue.exe

enter you two numbers:

input x:

1
input y:

2
After exchange function:

x is 1,y is 2.
D:\C_test>
*/

转载于:https://my.oschina.net/alphajay/blog/68698

C语言 - 数组作为参数传递给函数(按值传递和按引用传递)相关推荐

  1. 关于二维数组作为参数传递给函数的问题

    刚碰到要写一个函数func,要传入一个二维数组给该函数,于是写成func(int a[][]);但马上又发现将二维数组传给函数时必须指定第二维的维数,因为函数传递的是一个指向一个一维数组的指针,这个一 ...

  2. c语言 数组指针传递给函数_嵌入式开发-C语言-指针与数组

    1.指针与数组-掌握 在C语言中数组的指针:是指数组在内存中的起始地址,数组元素的地址:是指数组元素在内存中的起始地址一维数组的数组名为一维数组的指针(起始地址)例:double x[8];因些,x为 ...

  3. C语言——数组、字符串处理函数、strlen、strcpy和strncpy、strcat和strncat、strcmp和strncmp

    目录 一.数组 1.定义:类型 数组名[元素个数] 2.数组不能动态定义 3.如何访问数组中的元素:数组名[下标] 4.循环与数组的关系 5.数组的初始化 二.C99标准中的数组 三.字符串处理函数 ...

  4. st语言 数组的常用方法_LINEST函数使用方法介绍

    下面要和大家讲解的EXCEL函数是一个较为常用的函数,它的功能是通过使用"最小二乘法"计算最符合您的数据的直线来计算直线的统计值,并返回描述该直线的数组.此函数的特点是,因为它返回 ...

  5. JS中的函数参数传递到底是按值传递还是按引用传递

    首先我们知道JS中的数据类型大致可以分为简单数据类型和复杂数据类型: 当我们声明一个变量并给它赋值时,可以赋给其简单值和复杂值(以下堆内存和栈内存的地址表示均随意取的,只是为了区分,不代表真实的内存地 ...

  6. C语言数组、结构体、结构体数组作为函数参数

    数组作为函数参数 如果想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组? 调用函数时实际传递的是一个指针,所以函数的形参实际上是一个指针,但为了使程序员新手 ...

  7. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组

    1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...

  8. c调用python第三方库_Python使用ctypes模块调用DLL函数之C语言数组与numpy数组传递...

    在Python语言中,可以使用ctypes模块调用其它如C++语言编写的动态链接库DLL文件中的函数,在提高软件运行效率的同时,也可以充分利用目前市面上各种第三方的DLL库函数,以扩充Python软件 ...

  9. c语言字符串做为函数参数传递,c语言:字符串做为函数参数传递

    1.值传递 void swap(int x,int y) {    int temp = x; x = y; y = temp; }void main() { int a = 10, b = 20; ...

  10. C语言数组在函数中的传参

    在c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> ...

最新文章

  1. 记录一下mathtype输入任意形式矩阵
  2. 开平推进智慧城市等领域信息化建设及公共数据资源共享
  3. 自认为有必要学习的Sql 总结,积累 mybatis
  4. maven(5)坐标和依赖
  5. arcgis工具python源码_面向Arcgis的python脚本编程_数据
  6. 解决vscode格式化代码html属性换行问题; ctrl+s格式化去除分号,格式化自动单引号;解决js格式化换行问题;mac上的settings.json完整配置
  7. Linux 脚本、 正则表达式 等
  8. 关于redis的db的使用几号db的问题
  9. jsp加载常量的探讨
  10. tomcat 不支持put 高版本_Tomcat-远程代码执行漏洞
  11. XML验证框架在项目中的应用
  12. 88se9230 linux raid,Marvell发布全球首颗PCI-E 2.0 x2 SATA 6Gbps主控
  13. java 泛型对象实例化_java泛型对象的实例化
  14. Excel VBA VBA去重复的几种方法
  15. golang学习之远程木马demo编写
  16. 塑料壳上下扣合的卡扣设计_卡扣结构设计常识,结构设计中扣合量如何留
  17. 微信小游戏保存图片到本地
  18. 不知细叶谁裁出,二月春风似剪刀
  19. OpenCV算法加速的一些学习总结
  20. [导入]心若一动 泪就一行(转)

热门文章

  1. Win8 内置游戏应用更新 中文翻译错误得以修正
  2. 卷积网络如何让测试集准确率上升_调试深度学习网络
  3. php防止SQL注入
  4. PHP下划线驼峰相互转换
  5. PHP使用PHPExcel删除Excel单元格指定列的方法
  6. 编译doubango时,ffmpeg先用 2.8.15,再用4.2.2
  7. 解决办法:Type safety: The expression of type List needs unchecked conversion to conform
  8. LINUX获得线程号、设置线程名
  9. 注册不到zipkin服务_Spring Cloud微服务之 sleuth+zipkin日志聚合
  10. java解析获得birt报表的数据_java pojo实体类做birt报表数据源