sizeof问题

转载 2015年11月18日 10:01:16
下面仅为个人理解,编译器中验证外,没有任何理论依靠,若有错误请指出。
 
 
       首先,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{char c};sizeof(b)=1;
 

关于sizeof的几个问题

一.sizeof的特点(与strlen比较) 1.sizeof是运算符,strlen是函数,这意味着编译程序在编译的时候就把sizeof计算过了,所以sizeof(x)可以用来定义数组维数。 例如...
  • fdssdfdsf
  • fdssdfdsf
  • 2012年08月31日 12:47
  • 2300

C++中用sizeof()计算数组长度问题

sizeof()的作用是返回一个对象或者类型所占的内存字节数。当操作数是数组时,返回的是该数组占用的所有字节数=len*sizeof(object),其中len是数组长度,object是数组元素类型,...
  • shijiebei2009
  • shijiebei2009
  • 2013年03月26日 21:52
  • 1341

sizeof运算符和数组名的问题

#include  using namespace std; void theFun(char a[]) { cout } int main() { char a[100]...
  • beiyuan19880219
  • beiyuan19880219
  • 2014年10月13日 14:13
  • 187

关于sizeof的相关问题

(1)      sizeof是操作符,不是函数。 MSDN:The sizeof keyword gives the amount of storage, in bytes, associate w...
  • u010327174
  • u010327174
  • 2014年01月20日 23:59
  • 636

strlen(str)和sizeof(str)

1)int x=35;    char str[10]; //问:strlen(str)和sizeof(str)的值分别是多少? 答:strlen(str) 值不确定,strlen根据...
  • ysdaniel
  • ysdaniel
  • 2011年09月10日 15:05
  • 3792

最小交换合并问题(合并类问题的两种解法)

题目描述 在操场上沿一直线排列着 n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分。允许在第一次合并前对调一次相邻两堆石子的...
  • qq278053122
  • qq278053122
  • 2014年08月31日 10:30
  • 410

数组作为函数的参数时,不能通过sizeof运算符得到该数组的大小

当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。这意味着把数组传递给函数的效率非常高,也意味着程序员必须通过某种机...
  • zhghost
  • zhghost
  • 2010年02月03日 19:57
  • 2139

C/C++基础::sizeof() 与 sizeof(string)

sizeof(string 对象) ≠ string 对象的.size()成员函数(.size()与.length()不作区别,返回 string 的字符个数) string 的实现在各库中可能有所不...
  • lanchunhui
  • lanchunhui
  • 2016年02月25日 16:05
  • 2027

浅析C++中sizeof操作符的用法

1. 概要 sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月31日 11:27
  • 2075

sizeof(enum)

sizeof(enum)
  • Nanitou
  • Nanitou
  • 2015年06月06日 10:11
  • 1024
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sizeof问题
举报原因:
原因补充:

(最多只允许输入30个字)