最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
C# sizeof分析与实例
时间:2022-06-25 08:30:22 编辑:袖梨 来源:一聚教程网
sizeof操作的是一个结构体或者变量时,返回值为它的实际大小,这个实际大小可能包括为了字节对齐插入的多余字节。
第二句:如果操作的是一个静态大小的数组,返回整个数组的大小
第三句:sizeof操作符不能返回动态开辟的数组或形参数组的大小。
如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小,所以是4
int getsize(char p[100]="hello")
{
return sizeof(p);
}
int main(int argc, char* argv[])
{
char a[200]="hello!";
cout<
}
第一个返回200,第二个却返回4,sizeof(a)返回数组的大小,而第二个实际上是指针变量的大小,怎么回事呢?
在网上看到强人分析的msdn才知道原因:
sizeof是c/c++下的运算符,可用于任何变量名、类型名或常量值。
sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
今天主要讨论指针和数组的使用 具体其他的 可以自己查阅msdn
指针变量的sizeof
指针记录了另一个对象的地址。既然是来存放地址的,等于计算机内部地址总线的宽度。
所以在32位 计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在将来的64位系统中指针变量的sizeof结果为8。
数组的sizeof
数组的sizeof值等于数组所占用的内存字节数,也就是数组的长度
现在看段代码就清楚了
char str[] = “xxoo”;
char *p = str ;
int l = sizeof (str );
l = sizeof ( p );
可以分析
int l = sizeof (str );// sizeof 数组名时是计算数组的长度
l = sizeof ( p ); // p是个指针,指针在32位机子上长度是4字节的
在这里就可以发现,其实求得是数组长度 不是数组元素个数
但是如果我们需要求数组的个数如何求?其实还是蛮简单 msdn有模型:
int xx = sizeof( oo ) / sizeof( char ); // 总长度/单个元素的长度
sizeof()是c++语言自已的运算子。一般而言,关于运算子的行为属于语言本身自已的规定,不存在为什么的问题。也就说c++为sizeof运算子规定的行为就是要对数组名返回其数组所占内存的byte计数,而对其它变量返回应有的类型byte长度,
比如:
把”char str[];”改为”long str[4];”则”sizeof(str);”将返回值为16(16个byte)。而对其指向数组str[4]指针,在32位平台上内存地址的byte长度4。
下面引用一个经典例题:
double* (*a)[3][6];
cout<
既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此 sizeof(*a)=3*6*sizeof(double*)=72。同样的,**a表示一个double*[6]类型的数组,所以 sizeof(**a)=6*sizeof (double*)=24。***a就表示其中的一个元素,也就是double*了,所以 sizeof(***a)=4。至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。
相关文章
- 《无限暖暖》天星之羽获得位置介绍 12-20
- 《流放之路2》重铸台解锁方法介绍 12-20
- 《无限暖暖》瞄准那个亮亮的成就怎么做 12-20
- 《无限暖暖》魔气怪终结者完成方法 12-20
- 《无限暖暖》曙光毛团获得位置介绍 12-20
- 《无限暖暖》日光果获得位置介绍 12-20