非函数
首先大家需要明确,sizeof不是一个函数而是一个操作符,一些小伙伴经常口头上挂着"sizeof函数",这种说法是不正确的。
应该也好理解,比如sizeof(int),里面并没有传递实参,如果其为函数便不成立,所以sizeof仅仅只是一个操作符,继续实验一下:
参考demo: 1#include <stdio.h>
2#include <stdlib.h>
3
4/***************************************
5 * Fuction: sizeof简单测试
6 * Author: (公众号:最后一个bug)
7 **************************************/
8int main(int argc, char *argv[]) {
9 int a = 5;
10 printf("sizeof(char)= %d\n",sizeof(char));
11 printf("sizeof(int)= %d\n",sizeof(int));
12 printf("sizeof(float)= %d\n",sizeof(float));
13 printf("sizeof(double)= %d\n",sizeof(double));
14 printf("sizeof(a)= %d\n",sizeof(a));
15 return 0;
16}结果:
分析一下: - 汇编中5个红线标记处对应着C语言中5个sizeof使用点,在最终的汇编代码中并没有看到sizeof的痕迹。
- 同时还可以确认一点的是sizeof在编译阶段就完成了转化,所以经常有小伙伴考虑到sizeof会不会很耗时间等等,从这里看它仅仅只是一个常量,对程序的运行影响与常量是一致的。
|