参考:

CSDN::C/C++中数组名退化为指针的情况

stackoverflow::What is array decaying?

起因

笔者在写memset的时候总想偷一点懒(因为我们一般都是为了清零),于是一般都会有下面的写法:

#include <iostream>
#include <string.h>
#define memset(_) memset( (_) ,0,sizeof (_) )
using namespace std;
const int MAXN = 1005;
int x[MAXN]; int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0); x[15]=111;
memset(x);
cout<<x[15]<<endl; return 0;
}

感觉还挺不错的,但是总以来宏定义好像不是很好,那我们试试来写一个函数,仔细一想,好像不太好办。因为,如果数组名被传入了函数,它会退化成一个对应的指针变量,而这一点因为我们大学的语言老师没有可以提到过,所以给我留下了很多迷惑的空间。

经过研究,我写出了下面这样的等价代码:

#include <iostream>
#include <string.h>
//#define memset(_) memset( (_) ,0,sizeof (_) )
using namespace std;
const int MAXN = 1005;
int x[MAXN]; inline void memset(auto (&_)[MAXN]){
memset(_,0,sizeof _);
} int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0); x[15]=111;
memset(x);
cout<<x[15]<<endl; return 0;
}

哇,一下子就变得好糟糕,而且这还是需要已知数组大小的情况下才可以实现的。

暂时没有更好的解决办法,还是用宏定义吧(真香)。

最新文章

  1. 弹出层layer的使用
  2. BZOJ2322: [BeiJing2011]梦想封印
  3. 使用Adivisor配置增强处理
  4. sql 集合运算
  5. Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8
  6. sharepoint 2010 如何给文档库或自定义列表添加评论功能
  7. PS学习笔记
  8. MFC常见问题总结
  9. 146. 大小写转换 II
  10. nobup 与 后台运行命令
  11. 2018-2019-2 网络对抗技术 20165230 Exp2 后门原理与实践
  12. ubuntu14.04 中virtual box 加入 usb
  13. pl/sql中文乱码
  14. 自动化无线网破解工具wifite2
  15. c# 16进制转int
  16. C++设计模式之桥接模式
  17. 根据车辆品牌获取品牌所属公司,车标logo,创建年份等基本信息
  18. apple 下安装mysql 以及 碰到的问题
  19. 大数据:spark集群搭建
  20. 【Docker 命令】- build命令

热门文章

  1. 初学pyhon的几个练习小程序
  2. Nginx配置了解
  3. async await详解
  4. MySQL-每日定点运行
  5. DbGridEh根据某一个字段的值显示对应底色或字体变化
  6. 项目案例【Net Core】如何注入多个服务实现类
  7. mysql7笔记----存储过程实例
  8. swing Jframe 界面风格
  9. anaconda 环境新建/删除/拷贝 jupyter notebook上使用python虚拟环境 TensorFlow
  10. File operations 1