如何定义宏,返回数组的大小,并可以检查传入的参数是否为数组
来源:互联网 发布:网络mg老虎机赢钱技巧 编辑:程序博客网 时间:2024/05/18 02:43
问题描述:
通常我们会定义数组,如int a[100];
然后再写别的代码,然后在程序不知道的哪个位置,传入了一个a
我觉得他可能是个数组,但不确定,而且我还想知道a这个数组的大小。
通常我们会这么做sizeof(a)/sizeof(a[0])
但是这样做有问题,如果a是个对象,而刚好a这个对象重载了[ ]晕算法,那么这种写法不会报告错误,并会将这个错误一直带到后面去
因此,我们需要一种新的方法来避免这种问题。
解法:
#include<iostream>using namespace std;template <typename T, int N>char (&ASN(T (&array)[N]))[N];#define SIZEOF(array) sizeof(ASN(array))int main(){ int a[100]; cout<<SIZEOF(a)<<endl;}
解释:
声明一个函数,传入任意数组的引用,并传出char类型的同等大小数组,函数无需实现。
1、用到模版技术,支持任意类型的数组;
2、使用c的高级声明,包括数组引用的声明,注意[]的优先级高于&,所以,(&array)要用括号括起来;
3、使用sizeof的特性,因为sizeof是操作符,且在编译时期就执行完毕,因此,只需给出函数声明而不用实现。
- 如何定义宏,返回数组的大小,并可以检查传入的参数是否为数组
- 判断传入的参数是否是数组
- a[9]与9[a]的确是相同的,以及函数内部如何得到传入数组参数的大小
- a[9]与9[a]的确是相同的,以及函数内部如何得到传入数组参数的大小
- 数组属性,根据参数动态设置类中数组的长度!构造函数传入数组长度!并初始化数组!
- 【CVTE】请使用js编写一个函数:chunk(arr,size),把一个数组arr按照指定的数组大小size分割成若干个数组块,传入的参数分别为数组
- 向函数中传入二维数组并返回它的具体实现
- c++如何定义不知道大小的数组
- java 判断对象是否为空或者传入集合对象的是否为空,以及判断数组的长度
- C/C++传入数组及怎样限定传入数组的大小
- Oracle存储过程传入类似java中list、数组类型的参数并使用
- C语言基础 检查自己的编译器是否支持根据输入来确定数组的大小
- 大小为0的数组
- java中的arrayList传入oracle中的以数组(array)为参数的存储过程
- java调用oracle存储过程传入参数为数组的处理
- 检查字符串是否为电话号码或邮箱地址方法,并返回true or false的判断值
- 检查字符串是否为电话号码或邮箱地址方法,并返回true or false的判断值
- 如何向expect 传入数组做参数
- 新版新浪微博邀请,google music邀请 数量有限。
- windows下获取MAC地址的三种方法
- 关于ini文件获取段名以及key名问题
- 掌间无限研发部项目历览—农科频道手机客户端
- haskell使用技巧
- 如何定义宏,返回数组的大小,并可以检查传入的参数是否为数组
- 在delphi中,从dbgrid导出数据保存成excel文件
- sql server 错误9003:LSN无效(日志扫描号无效),对数据库的修复.
- java中断和线程结束深入探讨
- haskell代码片段
- 指定的服务并未以已安装的服务存在 unable to open the service 'tomcat5
- 关于Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)的问题
- 职责链模式
- spring依赖注入的方式