C++ sizeof 与 strlen 小结

1.sizeof 的适用场合

(1)sizeof的主要用途是与存储分配和I/O系统那样的例程进行通信;

void *malloc(size_t size);
size_t fread(void *ptr , size_t size , size_t nmemb , FILE *stream);

(2)可以用来查看某种类型对象的内存字节单元大小;

(3)动态分配内存,表示初始化字节大小;

(4)代替常量表示操作对象的字节大小;

(5)Windows 常用专用字段存放某类对象的字节大小,sizeof 方便其类型扩充。

2.sizeof 与strlen 的比较

  • sizeof 是运算符,strlen 是函数;
  • strlen 的输入参数只能是 char* 类型;
  • sizeof 的返回值是 size_t 类型,在头文件中 size_t 定义为 typedef unsigned int
  • sizeof 返回的数组的定义长度(字符数组会隐式的添加一个结束符),strlen 返回的是实际长度;
  • sizeof 后面是类型必须加括号,是变量名可以不加括号;
  • 计算结构变量的大小必须讨论数据对齐问题,为使CPU存取速度更快,C++在处理数据上常把结构变量中的成员大小按照4或者8的倍数计算;
  • sizeof 操作符不能用于函数类型,不完全类型或位字段(不完全类型指:未知存储大小的数据类型,如,未知内容的结构或联合体void类型、未知存储大小的数组类型)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 09:31:36

C++ sizeof 与 strlen 小结的相关文章

C++Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

C语言中的sizeof和strlen

1.sizeof是算符,strlen是函数: 2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的: 3.大部分编译程序,在编译的时候就把sizeof计算过了,这是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因: 4.strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小: 5.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧,这是因为sizeof是个操作符不是个函数. 示例代码:

C语言:内存地址分析 & sizeof和strlen用法总结

还是在大学时代接触的C语言,当时学习数组.指针等概念时,怎一个"晕"字了得.最近在学习之余,疯狂地恶补了相关知识,故总结之,如有错误,请大家多多指点. 一. 内存地址分析 1) 先来看一个最基础的例子: int a[4]; 提问:&a[0],  a,  &a,  a+1,  &(a+1),  &a+1 分别表示什么? 咋一看,真的不知所措: 我们可以图解来分析它(假设下面的操作均在32为系统上面). 先来对上图进行简单的说明工作: 1. 紫色区域就是数组

sizeof与strlen的区别

本文列举了sizeof与strlen的区别,总结一下: sizeof()的结果是一个对象占用的字节数,对于字符串包括字符串结尾的\0. strlen()的结果不包括\0. 下面是源码: #include <stdio.h> int main() { int i = 0; char acNum[] = "12345"; ; char ac3Num[3] = "12"; char *pcNum = "12345" //printf(&qu

sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正是帮助大家将相关知识总结清楚. 正文 先看一段代码 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void testchar(char str[]) 5 { 6 printf("%d %d\n", sizeof(str

sizeof和strlen的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 char *str1="absde"; char str2[]="absde";char str3[8]={'a',};char

【转】Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

sizeof和strlen

Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当

sizeof 和strlen

当计算字符串的大小时,sizeof和strlen的区别: sizeof 包括字符结束标识符,strlen不包括. #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int a[2] = {0,1}; char b[7] = "hellor"; int i = sizeof(a); int j = sizeof(a)/sizeof(a[0]); int m =