sizeof错误的认识(sizeof是关键字为什么可以加括号)
答案:1 悬赏:80 手机版
解决时间 2021-03-22 07:57
- 提问者网友:听门外雪花风
- 2021-03-21 15:47
sizeof错误的认识(sizeof是关键字为什么可以加括号)
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-03-21 16:06
下面仅为个人理解,编译器中验证外,没有任何理论依靠,若有错误请指出。首先,sizeof是一个关键字并不是一个函数。或许你有疑问,既然是一个关键字,为什么出现sizeof的时候后面操作对象都加上括号哪?原因如下。1. sizeof int ,结果为4,说明 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是实际大小,但是我觉是错误的,因为这个变量占用了内存, 虽然是在代码段,而不是数据段;(这个是错误的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯