002 C/C++ 数组的传递
传递一个数组给一个函数的正确做法:
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++ 数组的传递的更多相关文章
- 008android初级篇之jni中数组的传递
008android初级篇之jni中数组的传递 jni中在native中数据类型的实际类型 jchar 占两个字节,跟native c中的char(占一个字节)是两个数据类型 jbyte, unsig ...
- Java值传递以及引用的传递、数组的传递!!
转(http://blog.csdn.net/niuniu20008/article/details/2953785) 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递. 与其 ...
- 前端获取checkbox复选框的值 通过数组形式传递
html代码: <form role="form" class="select_people"> <div style="displ ...
- js中变量含(参数、数组)作用域传递问题
js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域和全局作用域,函数外面的变量函数里面可以找到使用,函数里面的变量外面无法访问到. 写这个是因为ES6中的一个例子开始的.首先看下例子 ...
- 【C语言】数组名传递给函数,数组的sizeof变为4的原因
C语言中,数组名作为参数传递给函数时,退化为指针,sizeof对指针操作结果应该是4.例子如下: #include<iostream> using namespace std; void ...
- C/C++ 结构体 数组 函数传递
#include <stdio.h> #include <stdlib.h> struct student{ int num; ]; double dec; }; void s ...
- .net后台获取DataTable数据,转换成json数组后传递到前台,通过jquery去操作json数据
一,后台获取json数据 protected void Page_Load(object sender, EventArgs e){ DataTable dt = DBhepler.GetDataT ...
- C#和C++互相操作 结构体数组的传递
C++中结构体定义: typedef struct // 平面 { double time; float normal[3]; float center[3]; } plane; C++中方法声明 ...
- C++程序设计(关于函数中数组传递的一点心得)
题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分: ...
随机推荐
- JAVA集合框架(三)-Map
前言 Map是java中用于存储键值对映射的接口.是解决编程问题最常用的数据结构之一.在工作中,有时候为实现一个功能可能写了好大一段代码,运行是ok了,但是就是不想回头再看,不敢相信自己写的这么烂.这 ...
- C# -- 多线程向同一文件写入
1. 多线程向同一文件写入Log. public delegate void AsyncLog(string str1, string str2); private void Test() { Con ...
- GO汇总
1.基础 GO语言介绍以及开发环境配置 Go-包 Go-数据类型以及变量,常量 Go-获取变量数据类型 GO-数组与切片 GO-切片拷贝以及赋值 Go-函数 Go-闭包 GO-逻辑判断(if,else ...
- maven搭建webservice apache cxf实现
用 web方式发布 webService 服务端.客户端 一.服务器端搭建 1.首先创建 一个web工程(增加Maven依赖) 2.增加Maven依赖包,如下: <project xmlns=& ...
- MySQL集群读写分离的自定义实现
基于MySQL Router可以实现高可用,读写分离,负载均衡之类的,MySQL Router可以说是非常轻量级的一个中间件了.看了一下MySQL Router的原理,其实并不复杂,原理也并不难理解, ...
- subprocess之check_out用法
在python3中使用subprocess的check_out方法时,因为该输出为byte类型,所以如果要查看具体的内容时需要进行转码,如果转码不对话,会影响内容输出的可读性,如下: #1,输出解码不 ...
- unittest框架之 BeautifulReport 模板报告生成的正确姿势
使用unittest框架的自动化测试,报告一定很重要,目前介绍一个比较高大上的报告模板 BeautifulReport.如果首次使用的话需要安装 pip install beautifulreport ...
- 关于ajax请求不到后台页面提示400 bad request的问题
解决方法一: 在contrller控制器中对应方法的 @RequestMapping注解中添加 method="RequestMethod.POST"属性
- IT兄弟连 HTML5教程 多媒体应用 新增多媒体播放元素
在HTML5之前,要在网站上展示视频.音频.动画等多媒体信息,除了使用第三方自主开发的播放器,使用最多的工具应该算是Flash了,但是它们都需要在浏览器中安装各种插件才能使用,有时速度很慢.HTML5 ...
- Python实战——基于股票的金融数据量化分析
说明:本文只是通过自己的已学知识对股票数据进行了一个简单的量化分析,只考虑了收盘情况,真实的量化交易中仅仅考虑收盘情况是不够的,还有很多的复杂因素,而且仅仅三年数据是不足以来指导真实的股票交易的,因此 ...