想总结这方面的内容,是出于周一参加某公司的笔试题,有一道题是说定义一个整型数组,里面数组元素的个数是用sizeof(unsigned long)表示,这样是否合法?当时写的答案是不合法,因为平时写涉及到申请、定义数组的时候,如果数组大小是一个变量,C++会给报错。而在几天之后我在CB上运行之后,发现并没有错。就查了一下sizeof的用法,看到MSDN上的关于sizeof和常量的解释,说的是sizeof之后得出来的是常量,这应该就是解释了为什么可以用sizeof()来定义一个数组的大小了吧。(后面接着有更合理的解释)

接着看《C陷阱与缺陷》第三章中的指针与数组,之前也有看到别人总结的“指针数组与数组指针”,便试着自己来把所看到的知识总结下。

1.C语言中只有一维数组,且数组大小必须在编译期作为一个常数确定下来。

关于这一点,查了“sizeof 编译期”,出来结果中找到了需要的内容,是一本名叫《Let's C!!!》的书,“sizeof不是函数,默认是一个编译期的运算符,表达式在编译期就能得出”(后面还说明了为什么sizeof(指针)在32位系统上得出的结果都是4字节,因为指针的值是可变的,在运行期可以修改,因此在编译期不能确定指针指向空间的大小)。

还有一个很棒的结果,《C++元编程》 第二节编译期判断继承关系 第3点,C++编译期三大神器(模板偏特化、函数重载、sizeof)着重看了sizeof的用法,在编译期直接对它求长的表达式做类型推导,即只是计算类型的字节把它写入编译出来的代码中,而不管里面的内容是什么。博主举了个例子如下:

#include <iostream>using namespace std;int main(){int i = 0;cout << sizeof(++i) << endl;cout << i << endl;return 0;
}

输出结果是4 0,sizeof确实只是对里面的表达式做类型字节的计算,而并不会运行表达式。

2.对于一个数组,能做的两件事:确定数组大小,获得数组下标为0的元素的指针。

对于数组名传递的形参,实质都是数组首元素指针的传递。

当把数组名用于sizeof的操作数时(此时数组名代表数组,而不是指针),得到的是整个数组所有元素所占的字节总数,即元素个数×类型字节数。

如果数组名用于其它场合,都是将其视为指针。

3.数组指针

写全该名称,就是“指向数组的指针”

int a[12][31]; a是一个有着12个数组类型元素的数组

int (*p)[31]; (*p)是一个拥有31个整型元素的数组,p是指向这个数组的指针。

p = a; p指向数组a的第一个元素,即有着31个元素的数组类型元素的一个。

int a[12][31];
int (*P)[31]; //p数组指针,指向a
for (p = a; p < &a[12]; p++){int *q;for (q = *p; q < &(*p)[31]; q++){*q = 0;}
}

4.指针数组

数组指针和指针数组很容易混淆,关键是语句的读取顺序,从数组名字开始由内向外阅读就比较好区分。

int *p[31]; //p和[31]结合,是一个数组,数组元素的类型是(int *)。也就是说p是一个数组,里面元素是指向整型的指针。

int (*p)[31]; //p和*结合,是一个指针,该指针指向一个有31个整型元素的数组。

转载于:https://www.cnblogs.com/cnblogsnearby/p/4930819.html

关于sizeof表达式作为数组元素个数的编译相关推荐

  1. 用sizeof来计算数组元素个数

    一般大家常见的是用sizeof来求不同数据类型的空间大小,如: 但是我们也可以用其来计算数组元素个数,如下: 从数据可得该数组元素个数为8个.

  2. 板邓:php获取数组元素个数

    php统计数组元素个数 count():对数组中的元素个数进行统计; sizeof():和count()具有同样的用途,这两个函数都可以返回数组元素个数.可以得到一个常规标量变量中的元素个数,如果传递 ...

  3. 如何利用指向数组的指针得到数组元素个数?

    如何利用指向数组的指针得到数组元素个数? 问题背景: 我得到了一个元素个数不确定的数组 array={element1,element2--} 现在将一个指针指向数组 char * pArray ; ...

  4. 如何计算数组元素个数?

    我们所说的数组元素个数是指总元素个数 例如: arr[10]中有10个元素 arr[3][4]中有3X4=12个元素 那么怎么能求出这个个数给计算机呢? 对于一维数组 #include <std ...

  5. C获取未知数组元素个数(win32)

    数组名str 数组元素个数n=sizeof(str)/sizeof(str[0]) 对于char类型数组个数n=sizeof(str)/sizeof(str[0])-1 sizeof('A')=1 s ...

  6. python提取数组元素_python简单获取数组元素个数的方法

    python简单获取数组元素个数的方法 更新时间:2015年07月13日 17:54:46 作者:pythoner 这篇文章主要介绍了python简单获取数组元素个数的方法,实例分析了Python中l ...

  7. 不懂就问--Java基本数据类型与数组(定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数)案例分析

    首先要知道java中的数组是线性排列的 其次要知道数组的初始标度为0 例如定义了一个二维数组 a[1][2],则数组详细为 [0][0]: [0][1]: [0][2]: [1][0]: [1][1] ...

  8. 统计多维数组php_php统计多维数组元素个数的方法介绍(附代码)

    详细内容 本篇文章给大家带来的内容是关于php统计多维数组元素个数的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一般情况下,使用count可以直接统计数组的元素 ...

  9. C++ 对数组sizeof 和对数组元素sizeof

    这一段程序 下面这段程序很有看点: //arr1 is an array of intsint *source=arr1; size_t sz=sizeof(arr1)/sizeof(*arr1);/ ...

最新文章

  1. golang gopsutil 进程 系统硬件 docker 信息获取
  2. Marble原理之线程中断
  3. PEACHPIE 0.9.11 版本发布,可以上生产了
  4. 怎么卸载python 旧版本_Python 如何移除旧的版本特性,如何迎接新的特性?
  5. location定位_javascript自学记录:location对象
  6. getHandel redis_Controller层利用Redis实现分布式锁(注解实现)
  7. 清华大学计算机专业高中选课系统,【清华大学计算机实验教学中心】_清华大学计算机实验教学中心...
  8. 当不知轴承型号时如何寻找轴承故障频率_电机轴承的故障诊断与失效分析
  9. Unity 手机VR GoogleVR 详细配置教程
  10. 影视后期视频制作系统——非编系统
  11. 2019 春季算法工程师实习生招聘历程
  12. 人教版初中计算机教案全本,人教版初中信息技术教案全集
  13. 开发必备的最高100个 Flutter 开源精品项目
  14. Adobe Illustrator 学习笔记1 跟随Brain Wood的教程
  15. java jbutton 文字颜色_java – 如何更改JButton的文本颜色
  16. 一个40岁老码农的总结,奋斗没有意义,选择大于努力
  17. css 实现数字0-9
  18. DB2 AS400数据库恢复
  19. matlab中xtem,快速傅里叶变换_蝶形运算_按频率抽取基2-fft算法_MATLAB代码
  20. 华为荣耀599元新机:5寸720p屏+四核

热门文章

  1. 编制一个c语言成绩记录簿_C语言学到什么程度能写推箱子
  2. LinKedHashMap和TreeMap介绍
  3. android小程序备忘录,撸一个会话备忘录的小程序
  4. ArrayList的泛型可以不写吗
  5. mysql hostname uroot_CACTI网络流量监控
  6. java 编辑我的世界_Editing Java版1.13 (section)
  7. docker安装mysql并配置,Docker安装MySql-挂载外部数据和配置
  8. 卡迪夫大数据专业排名_大数据揭秘!英国名校哪些专业录取率低?申请人最多呢?...
  9. 第九章 Oracle结构及数据库表与开发语言的对应关系、Oracle数据类型char与varchar
  10. mysql怎么实现事务序列化_MySQL 架构 - 事务处理