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分: ...
随机推荐
- pctfree和pctused
pctfree 是指一个数据块保留的空间百分比,表示数据块在什么情况下可以被insert 默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update了 即:当使用 ...
- Pick of the Week'19 | Nebula 第 45 周看点--Nebula 到底是不是原生存储?
每周五 Nebula 为你播报每周看点,每周看点由本周大事件.用户问答.Nebula 产品动态和推荐阅读构成. 今天是 2019 年第 45 个工作周的周五,来和 Nebula 看看本周有什么图数据库 ...
- centos7 laravel 项目 npm install报错
npm install 初始化项目依赖的前端资源 报错 ERR xxx .. socket,symbol link is not supported ... 如果报错了 重新npm install ...
- SpringBoot项目里,让TKmybatis支持可以手写sql的Mapper.xml文件
SpringBoot项目通常配合TKMybatis或MyBatis-Plus来做数据的持久化. 对于单表的增删改查,TKMybatis优雅简洁,无需像传统mybatis那样在mapper.xml文件里 ...
- Spring学习的第一天
Spring是以Ioc和Aop为内核,提供了表现层spring MVC 和持久层Spring JDBC等众多应用技术,还能整合开源世界众多著名的第三方框架和类库,成为使用最多的JavaEE企业应用开源 ...
- 网页前端之CSS学习记录总结篇
标签: 块级标签block:div, p, h1-h6, ul, ol,li, dl, dt, dd,table,tr等,独占一行,可以设置宽高,默认是父标签的100%:行内标签inline:a,sp ...
- 对于文本生成类4种评价指标的的计算BLEU METEOR ROUGE CIDEr
github下载链接:https://github.com/Maluuba/nlg-eval 将下载的文件放到工程目录,而后使用如下代码计算结果 具体的写作格式如下: from nlgeval imp ...
- Java之线程安全
什么是线程安全? 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 什么是线程安全问题? ...
- LeetCode 771: 宝石与石头 Jewels and Stones
题目: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. You're given strings ...
- 第一个月.day1
1. 编辑器下载 推荐的是hbulider 开发环境 2. 浏览器 推荐chrome 谷歌浏览器学习 3. 建立技术笔记 推荐博客园 Web 本月任务 搭建静态网页. 静态页面:不需要网络请求 ...