sizeof错误的认识(sizeof是关键字为什么可以加括号)下⾯仅为个⼈理解,编译器中验证外,没有任何理论依靠,若有错误请指出。
⾸先,sizeof是⼀个关键字并不是⼀个函数。或许你有疑问,既然是⼀个关键字,为什么出现sizeof的时候后⾯操作对象都加上括号哪?原因如下。
1. sizeof int ,结果为4,说明 sizeof说明他不是⼀个函数。
sizeof 指针2.siezof(int )是关键字,为什么分开标记,⽐⽅ int i;int i,j;使⽤空格、逗号区分关键字和操作对象, 请测试 int(i),你很惊
  奇的发现这句话竟然可以编译通过没有报错,这句话的作⽤是相当于 int i,原因如下,int i,我们从原理上分析这句话,空格起
  的是⼀个分割的作⽤,有⽤区分变量和变量类型。 int(i)同样也起到了区分变量和变量类型的,由于()的优先级别⾼,所以括号⾥
  边、外边成为两部分,这样与 int i;的功能相同
3.sizeof后⾯为什么⼀直有括号
sizeof struct  student;这⼀句话将会,编译失败,因为 sizeof 将 struct作为操作数,⽽并⾮将整个 struct  student 作为操作数, 这是因为优先级别的问题,
int a;sizeof a+1;结果值为5; 原因如下 sizeof(a)+1;
在sizeof后⾯加上括号,很容易区分操作对象,不容易出现歧义,去除优先级别错误
下⾯举例说明 sizeof 容易出差的地⽅。
char a[100]="三⽉软件⼯作室----Reage";
char *p,*p1=a;
sizeof p;或许你认为结果为1,可是错了,结果是⼀个4,因为p是⼀个指针,是⼀个地址,地址⼀个unsigned long型的变量,
所以结果为4;
sizeof p1;  值为4, 这个你或许认为没有意义,但是我是为下⾯⼀个做铺垫的
sizeof(a) =100;  ??为什么 sizeof(p1)为4,这⾥⾯涉及到汇编知识,a[100]在汇编中应该定义为  a .
fill 100 0;所以测
试a的值是⼀个应该是⼀个100,⽽p1的值不是
sizeof( &a)  vc= 100 ,gcc= 4; 我个⼈认为gcc的值是正确的,应为&a的地址得到的是⼀个地址的地址,还是地址 所以值
  应该为4
sizeof(&a[0])  4;没有疑问
struct b{};sizeof(b) ;vc=1,gcc=0;//应b是⼀个变量类型,定义⼀个b类型的数据,虽然他什么也没有但是他是存在
    不能不占内存吧,所以编译器设置⼤⼩为1;gcc中为0是实际⼤⼩,但是我觉是错误的,因为这个变量占⽤了内存,
    虽然是在代码段,⽽不是数据段;(这个是错误的。请⼤家谅解)
struct b{char c};sizeof(b)=1;
连接地址:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。