首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

sizeof,sizeof与strlen的区别

( size_t: sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定,sizeof到底返回什么类型。...这吧利于程序的可移植性。 C语言提供了一个解决方法,创造了一个类型别名size_t,用来统一表示sizeof的返回值类型。...对应当前系统的sizeof的返回值类型,可能是unsigned int,也可能是unsigned long long。)...(arr)); return 0; }//返回40 1.1sizeof中表达式不计算 在sizeof运算符中,表达式不会被计算,因为sizeof运算符返回的是数据类型的字节数,而不是表达式的值...sizeof(arr)); return 0; } 答案:16 因为该数组是一维数组,(3,4)为逗号表达式,表达式从左向右计算,值为最后一个表达式的值,arr[2]=4(数组

9710

c语言sizeof()_sizeof函数的用法

=%d,len_short=%d,len_double=%d", sizeof(int), sizeof(short), sizeof(double)); 获取某个数据类型所占用空间的字节数。...sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。 C语言会自动在在双引号””括起来的内容的末尾补上”\0″代表结束,ASCII中的0号位也占用一个字符。...注意,了解了sizeof的真正含义后。类似如下的代码就很low了。...因为数组是一片连续的空间,有可能元素3的空间是有数据的,那么C语言会将其读取出来, 当然是一些没有实际意义的杂乱无章的数字,但你不要想着去操作,否则可能导致数据错乱 所以有可能你运行好几次,后面的值都不会有变化...动态分配是运行过程中得到大小的,也就是说C++中new出来的内存,sizeof都无法统计的,退一步说,即使是new出来的空间也有可能失败,所以sizeof无法统计动态分配的内存大小。

85010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    sizeof和strlen的区别(strlen和sizeof的用法)

    int b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 =========================...sizeof(…)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。...实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。...具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);...int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

    86220

    sizeof与strlen的区别

    int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 ========================...    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。    ...实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。    ...具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:     数组——编译时分配的数组空间大小;     指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);...int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

    77230

    sizeof应用的小陷阱

    本篇笔记主要介绍在项目开发中,使用sizeof的一个要注意的地方。...sizeof作用就是返回一个对象或者类型所占的内存字节数。返回值是size_t,这个值依赖于编译系统,一般在嵌入式中我们常见的是返回int型....如果将sizeof的返回值付给一个类型不符的变量,MISRA 规则会报警告。还有一点要注意,C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算sizeof值。...在8位平台上返回值为7 ? 在16位平台上返回值为8, ? 在32位平台上返回值为8, ?...由以上测试可以看到sizeof的返回值在不同的平台上不有不同的结果,在实际应用中一定要注意,尤其是在32位系统上,一定要小心应用sizeof,以免引起错误。这就是传说中的字节对齐啊!

    77580

    strlen和sizeof的区别

    在编译器中,输入一个“abcdef”这样一个字符串,在这个字符串中会隐藏一个“\0”,即字符串结束的标志,所以在使用strlen函数时,遇到"\0"时就会停止读取,而"\0"前的字符个数就是字符串的长度...因为strlen函数遇到'\0'时才会停止读取,而arr[]中并没有'\0',也就是说strlen函数并不会停止读取,直到遇到内存中的'\0',也就是说这个值是一个随机值。...2.sizeof sizeof其实就是一个运算符,主要用来计算所占空间的字节大小。...示例: #include #include int main() { char arr[] = { 'a','b','c','\0'}; int a = sizeof...(arr); printf("%d\n", a); return 0; } 运行结果: 此时,我们得到的结果为4.因为sizeof计算的是所占字节的大小,所以后面隐藏的'\0',也会被计算进去,所以结果为

    11510

    sizeof和strlen的区别

    简单介绍: . sizeof是一个操作符,是用来计算操作数的所占内存的大小的,单位是字节 strlen是用来计算字符串的长度的一个函数,需要引用头文件string.h 区别在于sizeof是操作符...,而strlen是一个函数 . sizeof是不关心内存中所存放的数是多少的,只关心内存中的数所占几个字节 而strlen则需要关系内存中的数的多少,strlen函数用来计算字符串的长度,其计算的终点是...,使得其得出的字符串长度值错无并且其值的大小是一个随机的值 小练习: 我在网上看见了一个关于sizeof和strlen函数的有趣的题目,有利于我们去理解题目之间的区别,在这里我分享给大家: #include... int main() { short a = 10; int b = 2; int c = sizeof(a = b + 2); printf("%d...接下来我将做出解答: 解答: 最终的答案就是 2 和 10 我相信大家应该和我一样,一开始对这个结果是十分疑惑的,为何是2 和 10呢 因为a是short短整型,只有两个字节,而sizeof有一个特点,

    7700

    C++ sizeof 的介绍

    sizeof 类或者结构体sizeof 结构体以及类的实例是同一结果,sizeof 类本质上就是计算类的实例大小。sizeof 一个空类(或者空结构体),结果是 1。...sizeof 只考虑类的成员变量,不需要考虑成员函数,但是虚函数会增加虚表指针的空间(虚表指针在对象内存的首位置)。类的静态成员变量不计入 sizeof 大小。...- 子类继承一个空类,sizeof 则大小为子类的大小(子类也是空类,则 sizeof 为 1)当上述的类虚继承一个空类(是不是空都无所谓),那么虚继承的子类中需要添加一个虚基类指针(虚继承就是类似虚函数的实现来实现基类共享...sizeof 数组sizeof 数组和指针是不一样的,sizeof 计算的是数组的大小。C 风格的 char 数组,如果不指定数组的长度,计算结果是字符个数 +1,包含 \0 的结束位。...sizeof union联合体的内存是重叠的,则 sizeof 就是最大数据成员的大小。

    20610

    为什么结构体的 sizeof 不等于每个成员的 sizeof 之和

    问题 为什么结构体的 sizeof 不等于每个成员的 sizeof 之和? 回答 失传的C结构体打包技艺 — 内存对齐 作者:Eric S....它是在结构体数据之后,与结构体对齐一致的首个地址。 结构体尾填充的通用法则是:编译器将会对结构体进行尾填充,直至它的跨步地址。这条法则决定了 sizeof() 的返回值。.../ }; struct foo3 singleton; struct foo3 quad[4]; 你以为 sizeof(struct foo3) 的值是 9,但实际是 16。...(struct foo4) 的返回值将为 4。...因为如果分析出现一丁点儿错误,就会引发从程序崩溃到微妙数据损坏(这种情况糟得多)间的各种错误。 工具 clang 编译器有个 Wpadded 选项,可以生成有关对齐和填充的信息。

    1.2K20

    Spring Data默认值的错误

    Spring Data有很多配置的默认值,但不一定都适合你。如一个依赖Cassandra 的项目,有时写入数据后,并不能立马读到。这种错误并没有什么报错,一切都是正常的,就是读不到数据。...常见搭配是 R(读)和 W(写)的一致性都是 LOCAL_QURAM,这样可以保证能及时读到写入的数据;而假设在这种情况下,读写都用 LOCAL_ONE,则可能发生这样的情况:用户写入一个节点 A 就返回...,但用户 B 立马读的节点是 C,由于是LOCAL_ONE 一致性,则读完 C 就可立马返回。...其实是最合适的,因为只有一台机器,读写都只能命中一台。但产线上的 Cassandra 大多都是多数据中心多节点的,备份数大于1。所以读写都用 LOCAL_ONE 就会出现问题。...修正 修改默认值,以 consistency 为例。

    1.1K20

    strlen和sizeof的差别

    一个简单的样例: int a; coutsizeof a<<endl; 在头文件里typedef为unsigned int,其值在编译时即计算好了,參数能够是数组、指针、类型...实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。...详细而言,当參数分别例如以下时,sizeof返回的值表示的含义例如以下: 数组——编译时分配的数组空间大小; 指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型...8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小, 当适用一静态地空间数组, sizeof 归还所有数组的尺寸。...int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

    53620

    C++ sizeof()运算符的参数为指针和数组的值为什么不同

    sizeof()的参数为指针和数组 C++或C语言中,都可以使用sizeof()运算符来计算数组的字节大小,除此之外,在C++和C语言中,都可以使用一个指向数组第一个元素的内存地址的指针来引用数组,因此...,如果要计算数组的字节大小,或长度,传递数组本身或传递指向数组的指针给sizeof()运算符似乎都是可以的,实际上则不然,二者有本质上的区别。...(p); cout << n << std::endl; cout << m << std::endl; return 0; } 如上代码,编译运行之后,输出的n和m的值是不同的...不同值的原因 这主要是因为当sizeof()运算符的参数是数组本身,将计算的是数组的大小,而如果传递的是指针作为参数,那计算的便是指针的大小,而不是整个数组的。...来源:C++ sizeof()的参数为指针和数组的区别 免责声明:内容仅供参考,不保证正确性。

    18221

    sizeof遇到自增的问题

    1.导言 本来是在C++群里回答一个很简单的类型转换后判断字节的问题,后来发现代码中有个点还蛮有意思的,所以记录下来 2.场景 有这个代码 int a = 5; sizeof(a++); cout sizeof(a++) 只会返回变量 a 的大小,而不会执行 a++ 这个操作。所以,当输出 a 的值时,它仍然是初始值 5。...所以,即使你写 sizeof(b = a + 6),b 的值也不会改变 3.原理 sizeof 是一个编译时运算符,这意味着它在编译时就会计算出结果。...编译器会根据操作数的类型来确定 sizeof 的结果,而不是根据操作数的值。因此,即使操作数是一个表达式,sizeof 也不会对它进行求值。...也可以理解为sizeof里面如果有等号的话,等号右边的东西都是没用的

    9310
    领券