C++必知必会(六)数组形参

笔记:

c++根本不存在所谓的“数组形参”,数组在传入时,实质上只传入指向其首元素的指针 。

void average( int array[12] ); // 形参是一个int *
void average( int array[] ); // 形参仍然是一个int *
void average( int (&array)[12] ); // 现在函数只能接受大小为12的整型数组
// 注意:不可以使用int *初始化 int(&)[n]

template< int n >
void average( int (&array)[n]); // 借助模板使代码泛化

void average_n(int array[], int nSize); // 传统做法是把数组大小明确传入函数

template< int n >
inline void average( int (&array)[n] ) // 模板与传统做法结合实现
{
average_n(array, n);
}

多维数组的情况,以下声明语句相等,但是数组的第二个边界(以及后续的)没有被退化 :

void process( int array[10][20] ); // 形参是指向数组首元素的指针
void process( int (*array)[20] ); // 形参是指向一个具有20个元素的数组的指针
void process( int array[][20] ); // 形参是指针,但是比前边两个语句更加清晰

同样,利用模板以及传统做法结合,可以实现数组形参输入不需要明确传入大小:

void process_2d(int *arr, int n, int m);

template< int n, int m >
inline void process( int (&array)[n] )
{
process_2d(array, n, m);
}

时间: 2025-01-21 05:03:07

C++必知必会(六)数组形参的相关文章

JavaScript必知必会(六) delete in instanceof_javascript技巧

in in 判断 左边 的字符串或者能转换成字符串的是否属于 右边 的属性. var data = { x: , y: };//定义了直接对象 alert("x" in data);//true ,x 是data 的一个属性 alert( in data);//false , 是data的属性值. var arr = [, , ];//定义了直接数组对象 alert( in arr);//true ,arr 数组的index包括,,, 是他的一个[]属性. alert( in arr)

MYSQL必知必会读书笔记第六章之过滤数据_Mysql

mysql简介 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. where子句的位置,在同时使用ORDER BY 和WHERE子句时应该让ORDER BY 位于where之后,否则会产生错误. 1.不匹配检查 复制代码 代码如下: SELECT vend_id FROM products where vend_id <>1003 等同于 复制代码 代码如下: SELECT vend_id

【web必知必会】—— DOM:四个常用的方法

终于开始复习DOM的知识了,这一阵忙乎论文,基本都没好好看技术的书. 记得去年实习的时候,才开始真正的接触前端,发现原来JS可以使用的如此灵活. 说起DOM就不得不提起javascript的组成了,javascript是由三部分组成的: 1 ECMAScript 2 BOM 3 DOM 最开始,网页是由HTML这种静态的标签语言组成的,后来为了丰富网页,引入了Script脚本语言. 但由于浏览器厂商太多,每个厂商都使用自己的语言,导致script的语言种类繁多,最终由Netscape和sun对S

Python 程序员必知必会的开发者工具

Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作.同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中.本文将介绍Python程序员必知必会的开发者工具. 对于开发者来说,最实用的帮助莫过于帮助他们编写代码文档了.pydoc模块可以根据源代码中的docstrings为任何可导入模块生成格式良好的文档.Python包含了两个测试框架来自动测试代码以及验证代码的正确性:1)doctest模块,该模块可

《Oracle PL/SQL必知必会》——第2章 初识Oracle和PL/SQL 2.1 什么是Oracle

第2章 初识Oracle和PL/SQL Oracle PL/SQL必知必会 在本章中,你将认识Oracle和PL/SQL是什么,以及你可以使用什么工具来操作它们. 2.1 什么是Oracle 在前一章中,你学习了数据库和SQL.如所解释的那样,做所有工作(存储.检索.管理和操作数据)的实际上是数据库软件(DBMS或数据库管理系统[Database Management System]).Oracle DBMS(或者简称为Oracle)就是一个DBMS:也就是说,它是数据库软件. Oracle已经

Visual Studio 使用及调试必知必会

原文:Visual Studio 使用及调试必知必会   一:C# CODING 技巧 1:TODO 然后 CTRL + W + T,打开任务列表,选中 Comments,就会显示所有待做的任务 2:打开所在的文件夹 右键单击任何一个文件选项卡, 选择"打开所在的文件夹",或在 Solution Explorer 的文件上面点右键: 3:比对同一个文件 鼠标向下拖动红框内的图标. 4:按意愿编程 我把它定义为:按意愿编程,即,在写代码过程中,如果觉得需要使用到一个新类,可以先不用创建这

《Oracle PL/SQL必知必会》导读

前言 Oracle PL/SQL必知必会 Oracle Database(或Oracle RDBMS)是如此流行并且获得了广泛的认可,以至于大多数用户将其简称为"Oracle"(忽略了Oracle公司制作其他软件甚至硬件的事实).Oracle Database(我将像大多数人那样将其简称为"Oracle",以使事情变得简单)从20世纪70年代起就出现了,成为最早的数据库管理系统之一.Oracle是世界上最常用的数据库管理系统(Database Management

【web必知必会】——图解HTTP(上)

原文:[web必知必会]--图解HTTP(上) 本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化.管道化.多部分对象集合.范围请求等 后续会更新http其他的相关知识. 关键词概念 平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? 先看看官方的解释: URL:uniform resource l

Android必知必会-使用Intent打开第三方应用及验证可用性

本文讲的是Android必知必会-使用Intent打开第三方应用及验证可用性,一个普通的应用默认会有一个入口 Activity,它在 AndroidManifest.xml 中一般这样写: <application>      <activity android:name=".MainActivity" >          <intent-filter>              <action android:name="andr

MySQL必知必会

本文链接 http://alex-my.xyz/books/database/MySQL必知必会 http://blog.csdn.net/alex_my/article/details/72357498 1 基础知识 1 主键 唯一标识表中每行的这个列(这组列)称为主键. 应该总是定义主键,虽然并不总是需要主键. 任意两行都不具有相同的主键值. 每一行都必须具有一个主键值,不可为NULL. 2 常用命令 SHOW DATABASES; SHOW TABLES; SHOW COLUMNS FRO