sizeof函数总结

sizeof函数功能:计算数据空间的字节数

1.与strlen()比较

strlen计算字符数组的字符数,以"\0"为结束判断,不计算为‘\0‘的数组元素。

sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\0"的大小)。

2.指针与静态数组的sizeof操作

指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。

实例1::char *p;

sizeof(p)=4;

sizeof(*p) = 1;   //相当于sizeof(char);

实例2:

对于静态数组,sizeof可直接计算数组大小;

例:int a[10];

char b[]="hello";

sizeof(a)等于4*10=40;

sizeof(b)等于6;

void  fun(char p[])

{

sizeof(p);         //等于4,数组做型参时,数组名称当作指针使用!!

}

实例3(经典考题):

double* (*a)[3][6];

cout<<sizeof(a)<<endl; // 4 a为指针

cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组

cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针

cout<<sizeof(***a)<<endl; // 4 ***a为一维的第一个指针

cout<<sizeof(****a)<<endl; // 8 ****a为一个double变量

问题解析:

首先来看

:int (*p)[4]; //定义一个指针,指向由四个整形元素组成的对象

int a[3][4];//定义一个二维数组,其中a与p都是相同的指针类型

a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。既然是指针,所以sizeof(a)就是4。

既然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。

时间: 2024-08-01 19:17:36

sizeof函数总结的相关文章

【C++】sizeof()函数解析

[1] 常见数据类型的的sizeof函数得出的值表 char int short long float double 指针 32 bit 1 4 2 4 4 8 4 64 bit 1 4 or 8 2 8 4 8 8 [2] 数组求sizeof 的值 数组的大小 = 数组中元素的个数 x 该类型的大小 [3] union 求 sizeof 的值 由于 union 中存在复写现象,union 结构的 sizeof 的值即为 union 中最大的元素的大小.例如: union student{   

sizeof()函数的使用——————【Badboy】

1.sizeof的使用:sizeof操作符以字节形式给出了其操作数的存储大小. sizeof操作符不能用于函数类型,不完全类型或位字段.不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型.未知内容的结构或联合类型.void类型等. 2.sizeof的结果:sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型.该类型保证能容纳实现所建立的最大对象的字节大小. int.unsigned int .short int.unsigned sh

CC++中sizeof函数的用法

C/C++中sizeof()函数的用法 学习C/C++有时会遇到下面的情况: 已知 char *str1="absde"; char str2[]="absde"; char str3[8]={'a'}; char str4 [] = "0123456789"; 为什么sizeof(str1)=4 sizeof(str2)=6; sizeof(str3)=8; sizeof(str4)=11;呢? 丈二和尚摸不着头脑,接下来我们一起好好讨论讨论,

C语言中的sizeof函数总结

sizeof函数的结果: 变量:变量所占的字节数. int i = 0; printf("%d\n", sizeof(i)); //4 数组:数组所占的字节数. int arr_int1[] = {1,2,3,4,5}; int arr_int2[10] = {1,2,3,4,5}; printf("size_arr1=%d\n",sizeof(arr_int1)); //5*4=20 printf("size_arr2=%d\n",sizeof

sizeof函数详解

原文链接http://blog.csdn.net/wzy198852/article/details/7246836 sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下.但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不适合初学者,甚至都没有必要大作文章.但如果你想“知其然,更知其所以然”的话,那么这篇文章对你或许有所帮助.菜鸟我对C++的掌握尚未深入,其中不乏错误,欢迎各

SIZEOF函数使用

参考  http://blog.csdn.net/wzy198852/article/details/7246836 1.语法 sizeof有三种语法形式,如下:1) sizeof( object ); // sizeof( 对象 );2) sizeof( type_name ); // sizeof( 类型 );3) sizeof object; // sizeof 对象; 2.计算 1)计算求值 sizeof(2) = sizeof(int); sizeof(2.22) = sizeof(d

sizeof()函数求各类型变量所占空间的方法

#include "stdafx.h" #include <iostream> using namespace std; void func(char str[100]) { cout<<sizeof(str)<<endl; } int main() { char str[100]; func(str); //str传入函数做参数,做sizeof运算时被当做指针 返回4 cout<<sizeof(str)<<endl; //返

C语言 sizeof函数详解

1. 定义:sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数.MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a type (including aggregate types). This keyword returns a value of type siz

C语言学习入门 (三) sizeof 函数、内存地址、数组

sizeof可以用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址. 凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址 2.  当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量.比如: char a = 'A';// A的ASCII