sizeof指针的大小,指针变量的sizeof
怎么用sizeof检测指针指向数组大小?
对于cout _msize(p) endl;,输出应该是24,因为_msize(p)“返回在堆中分配的内存块的大小”,你为p分配了6个int空间,每个int是4字节。
而对于cout sizeof(*p) endl;,输出是一个int型数据所占内存的大小,在32位机上是4,在16位机上是2。如果写成cout sizeof(p) endl;,输出仍然是4,因为p是指针,只需要4字节。
关于sizeof测字符串大小的问题
sizeof(s1),S1只是一个指向字符串的首元素的地址值;
C语言中把指针是看成一个是对地址的编码。在32位的系统中,这个编码是用一个32位的整数来表示的,也就是说如果你用sizeof(s1)计算这个数组的长度就相当于sizeof(int),结果是4。如果你的目的是要表示这个数组的长度就得使用strlen(s)。
char s2[]="hello world";
得到的应该是你定义的数组的长度,例如你定义char s2[50],那么结果sizeof(s2)为:50
c语言,字符型指针char *s的长度,为什么sizeof(s)与sizeof(*s)的长度为什么不一样?
首先,两个sizeof所求的东西完全不一样,另外sizeof是编译的时候就求出长度,非运行的时候。
sizeof(s)是求指针长度,因为变量定义的是char *s;,这个长度可能是2,可能是4,还可能会是8,是由编译的时候决定的,比如VC6.0编译器长度就是4,因为VC6.0是32位的编译器,它的地址长度是32位表示,4个字节。gcc64位编译器则长度是8,64位系统地址表示长度64位8字节。TC是16位编译器,所以长度是2。综上sizeof(s)与电脑位数和总线有关,但是最重要的是与编译器有关,win64位的系统也可以运行32位的程序,VC6.0编译的程序在win64上运行,sizeof长度依然是4。如果程序gcc64位编译的,则不能运行在XP32位的系统上
sizeof(*s)是求字符的长度,长度为1,不管什么编译器长度不变。
sizeof判断指针长度
一个字符的长度是 1 byte, *ss 是1个字符,所以 sizeof(*ss)是1。
sizeof 是运算符,不是函数。
位字段是一种结构,描述 一个一个bit, 1个byte有8个bit(2进制数位)。
struct Bit {
unsigned a: 1; /* 1 Bit, 取值范围: 0 - 1 */
unsigned b: 2; /* 2 Bit, 取值范围: 0 - 3 */
unsigned c: 3; /* 3 Bit, 取值范围: 0 - 7 */
unsigned d: 4; /* 4 Bit, 取值范围: 0 - 15 */
}B;
C语言里sizeof(char)是什么意思
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
扩展资料:
在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 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.
其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为:
typedef?unsigned?int?size_t;
参考资料来源:百度百科-sizeof
C语言 如何输出指针所指向空间的大小
C语言无法输出指针所指向的空间的大小!
一般,我们获取一个变量所占内存空间的方法为:sizeof(变量名或类型名),如:
int?a;
int?aa[10];
int?*p=aa;
printf("sizeof(int)=%d\n",?sizeof(int)?);??//现在的机器一般为32位或64位机,int类型占四个字节,所以输出4
printf("sizeof(?a?)=%d\n",?sizeof(a)?);??//输出4
printf("sizeof(?aa?)=%d\n",?sizeof(aa)?);??//输出4*10=40
printf("sizeof(p)=%d\n",?sizeof(p)?);//输出4??见下面说明
printf("sizeof(int?*)=%d\n",?sizeof(int?*)?);//输出4??见下面说明
指针变量定义:用来存储内存地址的变量。指针变量中存储的是内存地址数据(一个整型数),而不是真正的数据,真正的数据是在地址中存放的。所以,指针变量实际上就是个整型变量,用sizeof命令去获取任意类型的指针变量都会得到4。
指针变量存储的是一个存储空间的首地址,究竟这个空间有多大,可以存储多少个数据,这是分配空间时所决定的。单独看一个地址值,是看不出其空间大小的。如:
int a;
int aa[10];
int *p ; //定义一个指针变量
p=aa ; //指向数组aa,aa的数据空间是40字节,10个整数
p=a; //指向一个整型变量,它的存储空间是4字节,一个整数