c语言中的sizeof()是如何分辨数组名和指针的?

如题所述

第1个回答  2024-09-02
sizeof函数并不区分数组名与指针,它只是简单告诉你操作数的大小。例如,给数组时,它告诉你数组的大小;给指针时,则告诉你指针的大小。关键在于void printSize(int a[10])中的a,其实它的类型是被调整为指向int的指针,而非数组。

当声明参数为「某某类型的数组」时,其会被调整为「某某类型的指针」。这是由语言规则决定的,即在参数声明时,若为数组形式,会被调整为指向该数组类型的指针。

若声明实为指针,但在调用函数时传入数组,这不会导致类型不匹配。因为除非作为sizeof、单目 & 等操作符的操作数,或初始化数组的字符串字面量,数组类型的表达式都会被转换为指向数组首元素的指针。在函数调用printSize(a)中,a作为数组,会在调用时被隐式转换为指向首元素的指针值,然后将这个指针值传给指针类型的参数,非常合理。

这种隐式转换被称作指针的退化,因为这种转换并不总发生。解释为数组名本质上是常量指针,是为了便于理解而隐藏的部分事实。了解真相后,无需再将它当真。

c语言中的sizeof()是如何分辨数组名和指针的?
sizeof函数并不区分数组名与指针,它只是简单告诉你操作数的大小。例如,给数组时,它告诉你数组的大小;给指针时,则告诉你指针的大小。关键在于void printSize(int a[10])中的a,其实它的类型是被调整为指向int的指针,而非数组。当声明参数为「某某类型的数组」时,其会被调整为「某某类型的指针」...

c++数组,sizeof()函数的问题
sizeof()是不能根据数组第一个元素的地址就可以得到整个数组的大小的,只能从数组名a才能得到,你可以试一下sizeof( &a[0] ),它的结果绝对 不是整个数组的大小。总结一下:sizeof函数是根据参数的类型算出size的,并不是根据参数的值。比如 long b = 10; short c = 10; sizeof(b) 与 si...

c语言,关于sizeof(数组名)的问题
当数组名作为函数参数传递后,“退化”为指针,sizeof自然也就不能得到数组的长度,只是得到一个指针的长度而已。你的试验代码里,数组名并没有作为函数参数传递过,他还是一个数组名,所以sizeof还是能得到数组的长度。

C语言中sizeof是什么意思?
sizeof是C语言的一个运算操作符,用来计算系统为后面的一对()中的标识符代表的实体分配的内存空间的字节数,比如sizeof(int)计算系统为int型变量分配的字节数(在32位int平台下是4);若有int a;,则sizeof(a)也能计算出系统为int型变量分配的字节数。再如sizeof(已声明过的数组名),就得到系统为...

c语言求解答,在定义的函数中调用sizeof?
在main函数里直接操作数组,sizeof(数组名)是数组占用的字节数 用数组名做参数传递,到了子函数里他就是个指针,指向数组首地址的指针 在子函数里sizeof(形参)得到的是一个指针占用的字节数,64位系统返回的是8,sizeof(int)等于4,所以结果是2 在子函数是不能通过这个方法得到整形数组的长度,...

c语言详解sizeof
sizeof 是 C 语言中的一种单目操作符,类似于 ++、-- 等操作符,并非函数。它以字节形式给出操作数的存储大小,操作数可以是表达式或括在括号内的类型名。操作数的存储大小由其类型决定。sizeof 的使用方法多样,例如用于数据类型、变量、指针和数组。在用于变量时,大小写形式如 sizeof(var_name) ...

c语言详解sizeof
取决于编译器和指针类型(如Microsoft C\/C++中的near指针为2字节)。3. 数组和联合类型: 数组的sizeof是元素总数,联合类型的sizeof是最大成员的字节数,结构类型的sizeof则是所有成员的总字节数(可能包含对齐填充)。4. 函数参数: 当sizeof操作数是函数形参时,它会返回指针的大小,如Linux中通常为...

关于sizeof()的疑问?
sizeof()数据占用内存大小;其实p1与p2指的都是字符串起始地址;sizeof()在计算的时候都是计算从起始地址开始,数据占用空间大小,如果是指针,即是指针所指向的数据占用空间量,并不是指针的大小;因为p1指向一个字符串常量,所以p1的值为字符串的长度;因为p2是一个数组,需数组大小是定义自动设定的...

sizeof()运用于数组和指针分别是什么结果?
指针的本质是内存地址,也就是操作系统为变量分配的存储地址 如果机器是32位的,那么就是4个字节存储 如果机器是64位的,那么就是8个字节

c语言程序里sizeof是什么意思
在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。在Pascal 语言与C语言中,对 sizeof() 的处理都是在编译阶段进行。

相似回答
大家正在搜