关于sizeof的问题

供稿:hz-xin.com     日期:2025-01-15
关于sizeof的一个问题

额。
1. sizeof(ptr) 返回的是指针类型所占内存的大小。
而指针类型所占内存的大小在每台pc上是固定的,不随指针类型变化,
比如 void * ptr 与 char * ptr 都是 相等的。
那大小是多少呢。 就看内存寻址的bits了, 也就是看字长word, 主流都是
32bits,那么当然sizeof(ptr) = 32bits = 32/8 bytes . that'all
2. 不要把 char ptr[]= “dd” , 与 char *ptr 等价。 两者是不同的。
前者因为外带了长度属性, 不能仅仅是看做是指针,后还有长度属性。
后者仅仅是个指针。

主函数应该是main,你打错成mian了

正如long54831所说,sizeof()的意思输出这个变量所占的内存字节数,而不同的编译器编译楼主所述代码,将产生不同的输出结果。楼主的输出结果可以这样来解释:
1、sizeof(a+b)统计变量a与b之和所占用的内存字节。int在楼主所用的编译器中解释为占用2个字节,a与b之和也是一个int类型的结果,所以输出还是为2。
2、sizeof(c+d)统计变量c与d之和所占用的内存字节。float在楼主所用的编译器中解释为占用4个字节,而c与d之和则被定义为double类型的结果,所以输出为8。

备注:我所用的VC++6.0,输出结果为4和4。

sizeOf函数的意思是输出这个变量所占的内存字节数。a+b的结果还是个整形的变量,它占两个字节。所以输出2.浮点型的占8个字节,当然输出的是8了。

我在VC上运行,输出是44

int在VC上是4个字节,在TC上是2字节
int跟int相加,还是int类型的

float是4个字节,两个float相加,
结果的类型应该还是4个字节

如果你的编译器把两个float相加的结果输出为8了
那么,说明它都把float扩展成double类型再相加的

dev-c++ 4.9.9.2上运行,结果是4和4

关于sizeof的一个问题
1. sizeof(ptr) 返回的是指针类型所占内存的大小。而指针类型所占内存的大小在每台pc上是固定的,不随指针类型变化,比如 void * ptr 与 char * ptr 都是 相等的。那大小是多少呢。 就看内存寻址的bits了, 也就是看字长word, 主流都是 32bits,那么当然sizeof(ptr) = 32bits...

关于sizeof的问题
1、sizeof(a+b)统计变量a与b之和所占用的内存字节。int在楼主所用的编译器中解释为占用2个字节,a与b之和也是一个int类型的结果,所以输出还是为2。2、sizeof(c+d)统计变量c与d之和所占用的内存字节。float在楼主所用的编译器中解释为占用4个字节,而c与d之和则被定义为double类型的结果,...

关于sizeof 长度计算问题。
特殊字符或者特殊的表示方式占用的字符要记清,如\\t占8个字节,\\65就是A,占一个字符\\0x125占一个字节等等 其实你的这个题目没啥意思,在真正的程序中,不会有这样的语句,你不能知道多少个字节时,可以直接让程序把答案给你,如直接写一句printf("%d",sizeof(p)),这样不就知道了???

关于sizeof()的疑问?
sizeof()数据占用内存大小;其实p1与p2指的都是字符串起始地址;sizeof()在计算的时候都是计算从起始地址开始,数据占用空间大小,如果是指针,即是指针所指向的数据占用空间量,并不是指针的大小;因为p1指向一个字符串常量,所以p1的值为字符串的长度;因为p2是一个数组,需数组大小是定义自动设定的...

sizeof 问题
内存对齐问题。一般C语言内存对齐的原则是,成员变量存放的起始地址必须是成员变量大小整数倍。那么,sizeof(char)=1, sizeof(int)=4,sizeof(short)=2。所以对于name1,str起始地址为name1+0,x起始地址为name1+2,num起始地址为name1+4。计算到name1的末端,一共8个字节长,其中有3字节没有...

有关sizeof的问题(结构体)
sizeof(b) = sizeof(m1)+sizeof(m2) =4+1 但是,static不算,并且内存对齐,也就是必须是占内存最多的那个量的倍数,即sizeof(m1)的倍数,即2*4=8>5,所以选8 sizeof(c)=sizeof(*)+sizeof(m1)+sizeof(m2)=4+4+4 虚函数存在代表一个指针用,所以用sizeof(*),指针...

sizeof()问题
sizeof s\/sizeof s[0]一般是用来计算数组内元素个数的, sizeof s是数组占用的内存空间, sizeof s[0]是第一个元素占用的空间,一除,个数就出来了

关于sizeof()的一个问题
cout<<sizeof(a)<<endl; \/\/根据上面的定义知道数组的大小是8 cout<<a<<endl; \/\/但是由于字符数组没有结束符号'\\0',输出的字符串就是不可预料的, a所占内存后面的内存的内容同样会被输出 void fun(char b[]){ cout<<sizeof(b)<<endl; \/\/数组作为参数,已经退化为指针,指针大小固定...

关于sizeof()的问题
第二、结构体和类的大小,也就是sizeof之后的结果,必须是其内部成员的对齐值的最大值,如果不是,必须补齐。下面就来计算你这道题了:i 的类型是 int ,所以他的自身对齐值是4,而指定对齐值是4(也就是系统默认的对齐值),所以 i 的有效对齐值就是4,所以就可以假设 i 是从内存中的 0x...

sizeof()的问题。。。
你定义的是int,所以这个就是4字节 signed int bit0:1是说 bit0的变量只占一个bit的空间,相当于BOOL 变量,如果是 int bit:4; 就是说占有4个bit空间,