sizeof指针的大小,指针变量的sizeof

http://www.itjxue.com  2023-01-21 08:24  来源:未知  点击次数: 

怎么用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字节,一个整数

(责任编辑:IT教学网)

更多

推荐图片影音文章