一、sizeof sizeof(...)是运算符,sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。在头文件中typedef为unsigned
int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
二、strlen
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
#include <iostream>
#include <cstring>
using namespace std;
void testOne(){}
int testTwo(){
return 0;
}
int main(){
//静态数组
char str[20]="0123456789";
int a=strlen(str);
int b=sizeof(str);
cout<<"strlen(str) "<<a<<endl //a=10;
<<"sizeof(str) "<<b<<endl << endl; //而b=20;
//指针
char* ss = "0123456789";
cout<<"strlen(ss) "<<strlen(ss)<<endl //10
//*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位
<<"sizeof(*ss) "<<sizeof(*ss)<<endl << endl
//ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4
<<"sizeof(ss) "<<sizeof(ss)<<endl << endl; //4
char * parr = new char[10];
int len_one = strlen(parr); //22 值不确定 这取决于parr里面存了什么(从parr[0]开始知道遇到第一个NULL结束)
int len_two = sizeof(parr); //4
int len_three = sizeof(*parr); //1
cout <<"strlen(parr) "<< len_one << endl<<"sizeof(parr) " << len_two << endl << "sizeof(*parr) " << len_three << endl << endl;
//函数
//cout<<"testOne()"<<sizeof(testOne())<<endl; 函数返回为void 不能通过编译
cout<<"testTwo() "<<sizeof( testTwo())<<endl<<endl;
return 0;
}
运行结果:
分享到:
相关推荐
strlen和sizeof的区别
【C++】 strlen与sizeof计算char* 与char数组(转载记录) - toby1123yjh的博客 - CSDN博客码:1/10【C++】 st
分析sizeof和strlen具体区别(源码和解析)
strlen和sizeof的区别 strlen 和 sizeof 的使用
strlen和sizeof的区别
sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:void *malloc(sizex_t size), size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream)
sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 .......
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中: char的sizeof值为1,char是我们编程能用的...
## sizeof和strlen的区别 sizeof是一个操作符,strlen是库函数。 sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘0‘的字符串作参数。 编译器在编译时就计算出了sizeof的结果。而strlen函数...
1. strlen 是个函数,只能以 char* (字符串)作为参数,来计算指定字符串 str 的度,但不 2. sizeof 是个单运算符,它的参数可以是数组
自己秋招根据面经和基础知识学习总结的知识点,主要内容包括但不限于:volatile关键字、sizeof & strlen、const的作用、enum、inline、delete[] 与 delete、多态的作用、C++与Python的区别、深拷贝与浅拷贝、extern ...
主要是下载分不够了,希望上传代码赚几分回来。 小白yige,这些代码是学习C的时候习题代码,没有什么实用价值,高手就别来笑话我了,特别是那些和我一样还在自学的朋友相互之间交流一下。
2:sizeof与strlen的区别?3:sizeof(int)(*p)的值是多少? 代码如下:int a[10]; sizeof(a);//是多少? sizeof(a[10]);//是多少? void f(int a[10]) { cout<<sizeof(a)<<endl;//值是多少? }View Code...
2.1 sizeof与strlen区别 2.2 strcpy、sprintf与memcpy 2.3 new/delete 与 malloc/free 2.4 确定一个数转化成二进制后是1的位的个数 2.5 ++i和i++的区别 3. 常见问题 3.1 数组名和指针的区别 3.2 指针和引用的区别 ...
c++面试题53个问题 1.C++的三大特性 2.C和C++的区别 ...49.sizeof是一个操作符,strlen是库函数 50.写一个“标准”宏MIN 51.简述strcpy sprintf与mencpy的区别 52.链表与数组的区别 53.简述队列和栈的异同
主要介绍了C语言中sizeof()与strlen()函数的使用入门及对比,同时二者在C++中的使用情况也基本上同理,是需要的朋友可以参考下
学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / ...
面试题19:sizeof和strlen的区别 3.5 结构体 面试题20:结构体是什么样的数据类型 面试题21:结构体可以直接赋值吗 面试题22:组织WAV文件头,并解析WAV格式的各项信息 面试题23:计算学生不及格的人数打印他们的...
C++面试题 1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的...
这是一本关于C++语言的百科全书,包括C和C++的命令、功能、编程和应用等方面的内容。全书分为五个部分:C++基础:C子集;C++的专有特征;标准函数库;标准C++类库;C++应用程序范例。详细描述和演示了定义C++语言的...