传递一个数组给一个函数的正确做法:

1.传递数组的内存首地址.

2.传递数组的有效长度.指数组的元素数量.


编译器总是将数组类型的变量作为指针传递.

计算数组的长度: int length = sizeof( a ) / sizeof( a[0] );

如果通过显示取地址的方式传递数组的一部分元素时,请确保length的正确.


C Sample code:

 #include "stdio.h"
#include "stdlib.h" //接受一个数组参数的函数:
void SampleArrayParam1( int * a, int length )
{
for( int i = ; i < length; i++ ) {
printf( "%d ", a[i] );
}
printf( "\n" );
} void SampleArrayParam2( int a[], int length )
{
for( int i = ; i < length; i++ ) {
printf( "%d ", a[i] );
}
printf( "\n" );
} void SampleArrayParam3( int a[], int length ) //a[7]中的'7'在这里无意义的.因为编译器总是传递来一个指针
{
for( int i = ; i < length; i++ ) {
printf( "%d ", a[i] );
}
printf( "\n" );
} void main()
{
int a[] ={ ,,,, };
int length = sizeof( a ) / sizeof( a[] ); //计算数组的长度. //编译器总是将数组类型的变量作为指针传递.所以SampleArrayParam1,SampleArrayParam2,SampleArrayParam3对编译器来说是没有区别的.
SampleArrayParam1( a, length );
SampleArrayParam2( a, length );
SampleArrayParam3( a, length ); // 通过显式取指针方式,可以传递数组中指定范围内的元素
SampleArrayParam1( &a[], length - ); //传递数组a的第2元素开始到最后一个元素.
SampleArrayParam2( &a[], length - ); //传递数组a的第3元素开始到最后一个元素.
SampleArrayParam3( &a[], length - ); //传递数组a的第4元素开始到最后一个元素.
SampleArrayParam1( &a[], length - ); //注意:请确保length正确,否则将引起错误.此处length参数(length-3)已经超出了数组a的长度.
system( "pause" );
}

Output result:


 -
请按任意键继续. . .

002 C/C++ 数组的传递的更多相关文章

  1. 008android初级篇之jni中数组的传递

    008android初级篇之jni中数组的传递 jni中在native中数据类型的实际类型 jchar 占两个字节,跟native c中的char(占一个字节)是两个数据类型 jbyte, unsig ...

  2. Java值传递以及引用的传递、数组的传递!!

    转(http://blog.csdn.net/niuniu20008/article/details/2953785) 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递. 与其 ...

  3. 前端获取checkbox复选框的值 通过数组形式传递

    html代码: <form role="form" class="select_people"> <div style="displ ...

  4. js中变量含(参数、数组)作用域传递问题

    js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域和全局作用域,函数外面的变量函数里面可以找到使用,函数里面的变量外面无法访问到. 写这个是因为ES6中的一个例子开始的.首先看下例子 ...

  5. 【C语言】数组名传递给函数,数组的sizeof变为4的原因

    C语言中,数组名作为参数传递给函数时,退化为指针,sizeof对指针操作结果应该是4.例子如下: #include<iostream> using namespace std; void ...

  6. C/C++ 结构体 数组 函数传递

    #include <stdio.h> #include <stdlib.h> struct student{ int num; ]; double dec; }; void s ...

  7. .net后台获取DataTable数据,转换成json数组后传递到前台,通过jquery去操作json数据

    一,后台获取json数据 protected void Page_Load(object sender, EventArgs e){  DataTable dt = DBhepler.GetDataT ...

  8. C#和C++互相操作 结构体数组的传递

    C++中结构体定义: typedef struct // 平面 { double time;  float normal[3]; float center[3];  } plane; C++中方法声明 ...

  9. C++程序设计(关于函数中数组传递的一点心得)

    题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分:   ...

随机推荐

  1. 通过Ajax的访问zuul的跨域问题解决方案

    刚开始在使用jqueryajax跨域请求zuul网关时,在后台发现一直拿不到前台请求的json数据,而前台也一直拿不到后台的响应数据.打开浏览器调试程序发现,本身ajax的POST请求统一都变成了op ...

  2. js-08-数组学习

    一.数组语法格式 var name=[item1,item2,......] 二.数组的声明创建 var arr=new Aarray( ) //声明一个空数组对象 var arr=new Array ...

  3. Dijkstra.NET 库体验报告

    在VS里用Nuget下载"Dijkstra.NET"库,然后就可以在需要的地方使用了. 首先,这是一个简单的graph,5个节点,7条边. 上代码 移动端看不清楚的可以看下面的: ...

  4. SQL保留2位小数

    truncate(num, 位数); );

  5. 生产环境Shell脚本Ping监控主机是否存活(多种方法)

    在网上针对shell脚本ping监控主机是否存活的文档很多,但大多都是ping一次就决定了状态,误报率会很高,为了精确判断,ping三次不通再发告警,只要一次ping通则正常.于是,今天中午抽出点时间 ...

  6. layui多个时间选择器出现闪退问题

    1.出现问题的代码 laydate.render({ elem: '#startDate' // }); laydate.render({ elem: '#endDate' // }); laydat ...

  7. a minimum of subsistence

    A hundred years ago it was assumed and scientifically "proved" by economists that the laws ...

  8. Redis开发与运维:特性

    Redis 特性 速度快 内存数据库 L1 cache reference 读取CPU的一级缓存 0.5 ns Branch mispredict (转移.分支预测) 5 ns L2 cache re ...

  9. PhpSpreadsheet的简单使用

    由于PHPExcel已经不再维护,PhpSpreadsheet是PHPExcel的下一个版本.PhpSpreadsheet是一个用纯PHP编写的库,并引入了命名空间,PSR规范等.这里简单介绍下Php ...

  10. python语言程序设计基础(第二版)第五章答案随笔

    1.实现isOdd()函数,参数为整数,如果整数是奇数,返回True,否则返回False def isOdd(num):    if num % 2 == 0:        return True  ...