c语言的sizeof
A. c语言中 sizeof()
sizeof(p)就是求数组p占用的所有内存尺寸,不会理会其中装载什么数据。
B. C语言中,sizeof是一个
sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符;sizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占的字节个数;
用法:
#include<stdio.h>
int main()
{
int l;
char a1[] = "abc";
l=sizeof( a1 );
printf("%d",l);//结果是:l=4;
return 0;
}
一个字符所占用的内存字节数为1;但数组最后还有一个NULL终止符,也占一个字节;
C. C语言中sizeof是什么意思
sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。常见的使用方式:
int a=10;
int arr=[1,2,3];
char str[]="hello";
int len_a = sizeof(a);
int len_arr = sizeof(arr);
int len_str = sizeof(str)
printf("len_a=%d,len_arr=%d,len_str=%d ",len_a,len_arr,len_str)
结果是:len_a=4,len_arr=12,len_str=6
(3)c语言的sizeof扩展阅读:
在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位)。
在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
在Pascal 语言与C语言中,对 sizeof() 的处理都是在编译阶段进行。
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
MSDN上的解释为:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t.
网络-sizeof
D. c语言程序里sizeof是什么意思
在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
在Pascal 语言与C语言中,对 sizeof() 的处理都是在编译阶段进行。
(4)c语言的sizeof扩展阅读
需要注意的是,结构体的 sizeof,由于字节对齐的原因,结构体所占的空间,并不是其所有成员所占空间的累加和。
sizeof 对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。所以
sizeof(1+2)等价于sizeof(int);
sizeof(1+2.5)等价于sizeof(double)。
E. c语言里面的sizeof是干什么的
是计算一个数在计算机里所占的内存的,比如说:
sizeof(int)=2
int型的在计算机里占2字节;
比如:
sizeof(float)=4;
sizeof(2)=2;
F. C语言的sizeof()问题
注意sizeof的返回值类型是一个size_t型,而size_t是这样定义的,typedef unsigned int size_t,也就是说它是一个unsigned int型。所以只有第四个是对的,其它都会出错。
G. c语言中SIZEOF啥意义
一、sizeof的概念
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
二、sizeof的使用方法
1、用于数据类型
sizeof使用形式:sizeof(type)
数据类型必须用括号括住。如sizeof(int)。
2、用于变量
sizeof使用形式:sizeof(var_name)或sizeofvar_name
变量名可以不用括号括住。如sizeof(var_name),sizeofvar_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。
注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。
如sizeof(max)若此时变量max定义为intmax(),sizeof(char_v)若此时char_v定义为charchar_v[MAX]且MAX未知,sizeof(void)都不是正确形式。
三、sizeof的结果
sizeof操作符的结果类型是size_t,它在头文件
中typedef为unsignedint类型。该类型保证能容纳实现所建立的最大对象的字节大小。
1、若操作数具有类型char、unsignedchar或signedchar,其结果等于1。
ANSIC正式规定字符类型为1字节。
2、int、unsignedint、shortint、unsignedshort、longint、unsignedlong、 float、double、longdouble类型的sizeof在ANSIC中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、 4、4、4、8、10。
3、当操作数是指针时,sizeof依赖于编译器。例如MicrosoftC/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。
4、当操作数具有数组类型时,其结果是数组的总字节数。
5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。
让我们看如下结构:
struct{charb;doublex;}a;
在某些机器上sizeof(a)=12,而一般sizeof(char)+sizeof(double)=9。
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。
6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。
四、sizeof与其他操作符的关系
sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。
五、sizeof的主要用途
1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:
void*malloc(size_tsize),
size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream)。
2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:
void*memset(void*s,intc,sizeof(s))。
六、建议
由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用sizeof来代替常量计算。
H. C语言sizeof函数如何使用
(1)sizeof不是函数,它只是一个操作符(operator)。
(2)sizeof的作用是返回一个对象或者类型所占的内存字节数,它的返回值的类型是size_t类型,而size_t是在头文件stddef.h中定义的。size_t 这是一个依赖于编译系统的值,一般定义为
「typedef unsigned int size_t;」,也就是无符号整型。
(3)sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
所以,
inti;
sizeof(i);//ok
sizeofi;//ok
sizeof(int);//ok
sizeofint;//error
既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,只用写法1就行了!
(4)说回你的提问,既然sizeof的返回值是unsigned int型,那么很明显可以用 %u 、%o 、%x 来输出,这三个都是无符号整型的格式符,分别对应十进制、八进制、十六进制。
(5)而%zd是修饰符z与有符号十进制整型格式符%d组合而成的格式符,表示按 size_t 的类型来输出。那么,肯定,%zd 可以用来输出 sizeof 的返回值。
(6)而%d是按有符号整型来输出数值,所以与unsigned int的表示范围是不一样的,如果 sizeof 的返回值超出了 %d 的表示范围的话,是会输出一个不正确的数值的。
总结一下:sizeof 的返回值可以用 %u 、 %o 、 %x 、 %zd 来正常输出,而用 %d 的时候需要注意返回值是否会超出 %d (即 signed int 型)的表示范围。
另外,有的操作系统或编译器里,size_t 的类型可能是 long unsigned int 型,所以 输出 sizeof 的返回值的时候, 应该用 %lu 等。
以上,如有帮助,烦请点点赞,谢谢!
I. C语言中,sizeof运算符有什么作用
sizeof运算符
该运算符在编译阶段就已经起作用了。它以字节为单位返回其操作数的大小。它的操作数可以是数据对象也可以是一个类型。如果是类型那么操作数需要用圆括号括起来。
如:sizeof(int)=4;
(9)c语言的sizeof扩展阅读:
C语言其他运算符:
1、取模运算符%
该运算符有个特性就是只支持整数运算。它的作用就是用左边的操作数除以右边的操作数得到的余数。它对浮点数其他类型不起作用。
如:11%2=1因为11除以2得5余1
2、自增自减运算符++/--
这种运算符的基本作用就是让其操作数增加1或者减去1。这种运算符有两种模式:前缀模式和后缀模式。
前缀模式:运算符放在操作数的前面,在表达式中求值时先将操作数进行加1或者减1操作然后再参与运算。
后缀模式:运算符放在操作数的后面,在表达式中求值时先将操作数参与运算然后再对操作数进行加1或者减1操作。
3、三目运算符?:
顾名思义就是三个操作数的运算符,它的用法时当问号前面的表达式的值为真时,取值为冒号前面的数值,否则取值为冒号后面的数值。由于它的执行效率较高,常被我们用来代替条件语句。
如:x>1?2:3;这句话的意思就是当x的值大于1时,整个表达式的值为2,否则为3。
J. c语言中的 *sizeof 问题
double是双精度浮点数,比float 能表示小数点儿后更多的位。
语法上可以不一样,malloc的参数是分配置内存的大小,你写个240代替30*sizeof(double)
也是可以的,但是不直观。返回值是void *, 前面的(double*)是强制类型转换,应该是要赋值给一个double*的变量。