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

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. WebShell代码分析溯源(八)

    WebShell代码分析溯源(八) 一.一句话变形马样本 <?php $e=$_REQUEST['e'];$arr= array('test', $_REQUEST['POST']);uasor ...

  2. Virtual Box复制虚拟机

    用惯了VM换BOX还是有点不大一样的,比如复制 我用了2个网卡,所以看起来麻烦了一次 注释了UUID 应该有更好的办法来操作,下面的看起来有点啰嗦,先凑合着这样弄... 1.关机 2.复制 3.改名称 ...

  3. C#&.Net干货分享- 构造BaiduLanguageHelper对接百度的语言翻译

    全部是封装的API源码... namespace Frame.Api{    /// <summary>    /// 百度多语言支持器    /// </summary>   ...

  4. Eclipse中如何添加相对路径的外部jar包

    在eclipse中进行java编程的时候,常常需要引用外部jar包.而采用相对路径引用jar包可以大大方便java工程的拷贝,这样使得java工程从一个路径转移到另一个路径时不用大费周章的修改外包ja ...

  5. [C]编译器对char数组声明的一个行为

    1概述 如果使用char[]来声明char数组,那么编译器会自动计算后面的字面量字符数,再加上一个空字符,作为它的长度.实际上这个数组最后一位被编译器强行加上了\0: #include <std ...

  6. python-参数化-(2)(数据库判断是否存在并返回满足条件的数据)

    1.根据python-参数化-(1),生成的数据号码 在数据库查询后判断是否存在若不存在返回手机号码,若存在返回该手机号码对应数据的信息,未封装成类或函数上代码 import pymysqlconn= ...

  7. asp开发类型判段

    Asp的东西有许多,asp的类型便是其中之一,如同Asp的数据类型只需一个那便是"variant ". 它是一种特别的数据类型可以依据它的运用标明许多不同品种的信息(cnhfjj) ...

  8. js获取input checkbox的选中值

    HTML代码: <form action="/test/action" method="get"> <input type="che ...

  9. python图片爬虫 - 批量下载unsplash图片

    前言 unslpash绝对是找图的绝佳场所, 但是进网站等待图片加载真的令人捉急, 仿佛是一场拼RP的战争 然后就开始思考用爬虫帮我批量下载, 等下载完再挑选, 操作了一下不算很麻烦, 顺便也给大家提 ...

  10. Cypress安装使用(E2E测试框架)

    一.简介 Cypress是为现代网络打造的下一代前端测试工具,解决了开发人员和QA工程师在测试现代应用程序时面临的关键难点问题. Cypress包含免费的.开源的.可本地安装的Test Runner  ...