C语言中sizeof和strlen函数区别在哪?

   更新日期:2024.05.17
一、sizeof
sizeof(...)是运算符,在头文件中typedef为unsigned
int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
二、strlen
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL;
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned
int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
2.sizeof是算符,strlen是函数。
3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
sizeof还可以用函数做参数,比如:
short
f();
printf("%d\n",
sizeof(f()));
输出的结果是sizeof(short),即2。
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5.大部分编译程序
在编译的时候就把sizeof计算过了
是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char
str[20]="0123456789";
int
a=strlen(str);
//a=10;
int
b=sizeof(str);
//而b=20;
6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
8.当适用了于一个结构类型时或变量,
sizeof
返回实际的大小,
当适用一静态地空间数组,
sizeof
归还全部数组的尺寸。
sizeof
操作符不能返回动态地被分派了的数组或外部的数组的尺寸
9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
如:
fun(char
[8])
fun(char
[])
都等价于
fun(char
*)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小,
需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged
char
*p1,
int
len)
{
unsigned
char*
buf
=
new
unsigned
char[len+1]
memcpy(buf,
p1,
len);
}

  • 19681182945 :C语言中sizeof是什么意思啊?
    韶怡的4775 :答:在 C 语言中,可以使用 sizeof 运算符来计算不同数据类型所占用的空间大小。sizeof 运算符的语法格式如下:sizeof(type)其中,type 是数据类型,可以是 int、char、float、double、struct、union 等等。下面是常见数据类型在 64 位系统中所占用的空间大小:char:1 字节 short:2 字节 int:4 字节 ...
  • 19681182945 :sizeof在c语言中是什么意思?
    韶怡的4775 :答:sizeof在c语言中的意思是数据类型长度符函数。在Pascal语言中,sizeof()是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在C语言中,sizeof()是一个判断数据类型或者表达式长度的运算符。在Pascal语言与C语言中,对sizeof()的处理都是在编译阶段进行。MSDN上的解释为:The...
  • 19681182945 :sizeof在C语言中是什么意思?
    韶怡的4775 :答:sizeof在C语言中是一个运算符,用于返回变量的字节数(存储字节的数量)。调用sizeof时,可以使用变量名或者某种类型的数据(如int),而它会返回以字节为单位的大小。例如,如果你使用sizeof(int),它会返回4,表示int类型的变量占4个字节。sizeof在C语言中也可以用于求数组的大小,例如intarray,如...
  • 19681182945 :sizeof()在C语言中是什么作用啊?
    韶怡的4775 :答: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\n",len_a,len_arr,...
  • 19681182945 :C语言中sizeof的用法
    韶怡的4775 :答:sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义 这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed char和unsigned char的sizeof值为1,毕竟char是编...
  • 19681182945 :C语言中,sizeof运算符有什么作用?
    韶怡的4775 :答:sizeof运算符 该运算符在编译阶段就已经起作用了。它以字节为单位返回其操作数的大小。它的操作数可以是数据对象也可以是一个类型。如果是类型那么操作数需要用圆括号括起来。如:sizeof(int)=4;
  • 19681182945 :C语言中sizeof和strlen函数区别在哪?
    韶怡的4775 :答:一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型...
  • 19681182945 :c语言中SIZEOF啥意义
    韶怡的4775 :答:sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type)数据类型...
  • 19681182945 :C语言中sizeof是什么意思?
    韶怡的4775 :答:sizeof是C语言的一个运算操作符,用来计算系统为后面的一对()中的标识符代表的实体分配的内存空间的字节数,比如sizeof(int)计算系统为int型变量分配的字节数(在32位int平台下是4);若有int a;,则sizeof(a)也能计算出系统为int型变量分配的字节数。再如sizeof(已声明过的数组名),就得到系统为...
  • 19681182945 :c语言中sizeof什么意思
    韶怡的4775 :答:sizeof 不是函数copy名,而是运算符。计算 变量类型百,或某一变量占内存度 大小 的字节数。例如 int 型,知double 型,struct 型,简道单变量名,数组名 :include <stdio.h> struct AA{ char name[80];int v[10];double d[2];};int main(){ int i = 102;double v=18.00;struct AA...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网