牛骨文教育服务平台(让学习变的简单)
博文笔记

sizeof在编译时是替代

创建时间:2017-04-22 投稿人: 浏览次数:160
 首先要明确sizeof不是函数,也不是一元运算符,他是个类似宏定义的特殊关键字,sizeof();括号内在编译过程中是不被编译的,而是被替代类型。

    int a=8;sizeof(a);在编译过程中,它不管a的值是什么,只是被替换成类型sizeof(int);结果为4.

    如果sizeof(a=6);呢,也是一样的转换成a的类型,但是要注意   因为a=6是不被编译的,所以执行完sizeof(a=6);a的值还是8,是不变的!

记住以下几个结论:

1.unsigned影响的只是最高位bit的意义(正负),数据长度不会被改变的。所以sizeof(unsigned   int)   ==   sizeof(int);
2.自定义类型的sizeof取值等同于它的类型原形。如typedef short WORD;sizeof(short) == sizeof(WORD)。
3.对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:

  int   f1(){return   0;};
  cout < <sizeof(f1()) < <endl;   // f1()返回值为int,因此被认为是int
4.只要是指针,大小就是4。如:cout < <sizeof(string*) < <endl;   //   4
5.数组的大小是各维数的乘积*数组元素所属类型的大小。如:

  char   a[]   =   "abcdef ";
  int   b[20]   =   {3,   4};
  char   c[2][3]   =   { "aa ",   "bb "};
  cout < <sizeof(a) < <endl;   //   8
  cout < <sizeof(b) < <endl;   //   20*4
  cout < <sizeof(c) < <endl;   //   6
 

   数组a的大小在定义时未指定,编译时给它分配的空间是按照初始化的值确定的,也就是8,包括末尾不显示的‘’。
6.字符串的sizeof和strlen的区别(见下列示例)。

示例:

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。