sizeof返回的值到底是什么?

Windows 10 64位, gcc 9.3

如果printf的格式参数写%d,编译器会提示sizeof返回的是unsigned long long int

结果显示sizeof(s)是6,应该是5个字母加一个结束字符'\0',一共6个字节

为什么sizeof(s+0)结果是8呢?或者为什么sizeof(s)不是8呢,在我这台电脑,用gcc,明显unsigned long long 字节是8

#include <stdio.h>
int main(){
char s[]="ABCDE";
printf("%I64u\n",sizeof(s));
printf("%I64u\n",sizeof(s+0));
return 0;
}

sizeof的用法是:sizeof(表达式)。

如果表达式是一个变量或常量,可以省略括号。否则,有括号、无括号的结果是不同的。作用是返回为表达式分配的字节数。

在本例中,s是字符数组,sizeof(s)返回6,说明为数组分配了6字节,你的理解是对的。

而在sizeof(s+2)中,s+2的结果是一个unsigned long long int类型的整数,sizeof返回的是为存储这种类型的整数需分配的字节数,在你的系统上,它就是8。

也就是说,sizeof(表达式)返回的值与表达式的结果的类型有关,另外sizeof返回的值本身的类型是unsigned long int的。

比如:

假设在一个系统上,int为4字节,long int为4字节,long long int为8字节,float为4字节,double为8字节。则,sizeof(1)返回4,sizeof(1L)返回8,sizeof(1LL)返回8。同时,sizeof(1+2)返回4,sizeof(1.0+2)返回8,而sizeof(1.0F+2)就会返回4。

下面是一个综合例子:

#include <stdio.h>

int main()

{

int a=1;

struct ss

{

int i;

char s[8];

}s1;

typedef ss s;

printf("%lu ",sizeof a);

printf("%lu ",sizeof 1);

printf("%lu ",sizeof(a+1));

printf("%lu ",sizeof a+1);

printf("%lu ",sizeof(1+2));

printf("%lu ",sizeof 1+2);

printf("%lu ",sizeof(1));

printf("%lu ",sizeof s1);

printf("%lu\n",sizeof(s));

printf("%lu ",sizeof((short)1));

printf("%lu ",sizeof(1L));

printf("%lu ",sizeof 1LL);

printf("%lu ",sizeof 1.0);

printf("%lu ",sizeof(1.0F));

printf("%lu ",sizeof 1.0d);

printf("%lu ",sizeof(1.0+2));

printf("%lu ",sizeof(1.0F+2));

printf("%lu\n",sizeof(1.0d+2));

return 0;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-04-18
我在32位编译器上,用%d格式输出,结果分别是6和4。
编译器对于直接输出 s 对象,应该取的是指针所指向的对象长度,也就是字符串"ABCDE";
对于运算 (s+0),则按照指针对象解析长度,在32位机上解析为4字节。
你的编译器应该开了64bit选项,默认指针类型都是按照8字节占用空间的。你可以试试你默认声明 int 型和 long 型变量,sizeof() 的结果分别是多少。

sizeof返回值是什么?
size 相当于TYPE与LENGTH的乘积,X1的类型为BYTE返回值1,LENGTH对DUP时返回返回值也是1,所以SIZE值为1。size是:取变量数据项长度算符。SIZE算符,汇编程序将回送分配给该变量的字节数,即 SIZE=LENGTH TYPE 例如:ARRAY DW 50 DUP(0) 则 SIZE ARRAY=50 2=100 要注意:对字符串变量求其长度,...

解释:sizeof(float)为什么是一个整形表达式?
sizeof() 函数的返回值为整形 同时sizeof(float)为一个表达式.

C语言中,sizeof返回值代表什么意思?
sizeof是C\/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义 这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed char和unsigned char的sizeof值...

sizeof()是什么意思?
sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位)。char是c语言中基本类型,一般char类型占1个字节。sizeof(char)的结果是,1。sizeof:计算数据类型长度 char = 1 int 2,long 4 int a[6];sizeof (a) 2*6= 12 单位都是字节。float 4 ...

sizeof返回的值到底是什么?
也就是说,sizeof(表达式)返回的值与表达式的结果的类型有关,另外sizeof返回的值本身的类型是unsigned long int的。比如:假设在一个系统上,int为4字节,long int为4字节,long long int为8字节,float为4字节,double为8字节。则,sizeof(1)返回4,sizeof(1L)返回8,sizeof(1LL)返回8。同时...

c语言sizeof函数
sizeof的返回值可以使用%u(十进制无符号)、%o(八进制无符号)、%x(十六进制无符号)来输出,而%zd则是专为size_t类型设计的,能准确显示其值。然而,需要注意的是,如果sizeof的返回值超过了signed int(有符号整型)的表示范围,使用%d格式符可能会导致输出错误。在某些情况下,size_t可能为long ...

sizeof()返回什么类型的值
DBL_MAX:double型的最大值 DBL_MIN:double型的最小值 FLT_MAX:float型的最大值 FLT_MIN:float型的最小值 1、负值取值范围为-1.79769313486231570E+308到-4.94065645841246544E-324;2、正值取值范围为4.94065645841246544E-324到1.79769313486231570E+308。

sizeof(float)是()类型表达式??
因为sizeof()函数是来计算机对象在计算机内存中所占的存储空间,所以其结果只能为整数。

sizeof("")与sizeof('')为什么第一个返回值是1 第二个是4 引号中是空...
sizeof("") 返回字符串占的空间大小,因是个空串,只有一个字符\\0,所以返回1,即占一个字节空间 sizeof(' ') 返回字符常量' '所占空间大小,C语言中字符常量被系统视作int类型数据,所以返回4,即占4个字节空间. 而C++中会返回1 ...

sizeof返回的是什么?类型是什么?
N=size(X,2),就是把矩阵X的列数赋值给N 1、s=size(A),\\x0d当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数.\\x0d 2、[r,c]=size(A),\\x0d当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第...

相似回答