sizeof()和strlen()用法
来源:互联网 发布:安卓浏览器内核源码 编辑:程序博客网 时间:2024/04/29 09:52
1、sizeof( )是运算符,不是函数。
在编译时计算,因此不能用来返回动态分配(malloc)的内存空间的大小。
2、strlen( )是函数,要在运行时才能计算。
函数的参数必须是字符型指针(char *),必须是以'\0'结尾的。
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置开始计算,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含“\0”)。
注意:当数组名作为strlen的函数参数传入时,实际上数组就退化成指针了。
举例1:
char *s = "0234567";sizeof(s); 结果 4 ===》s是指向字符串常量的字符指针sizeof(*s); 结果 1 ===》*s是第一个字符//大部分编译程序,在编译的时候就把sizeof计算过了,是类型或是变量的长度
举例2:
char arr[10] = "Hello";int len_str = strlen(arr);int len_sizeof = sizeof(arr); cout << len_str << " and " << len_sizeof << endl; //输出结果为:5 and 10当arr是数组时,sizeof返回的是编译器为其分配的数组空间大小,不关心里面存了多少数据。
strlen只关心存储的数据内容,不关心空间的大小和类型。
注意:sizeof在不同平台的值并不一样
举例3:
char szPath[MAX_PATH];//如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH//但是将szPath作为虚参声明时void fun(char szPath[MAX_PATH]);sizeof(szPath);却会是4(指针大小)
其实理解 sizeof 只需要抓住一个要点:栈
程序存储分布有三个区域:栈、静态和动态。能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;
动态和静态存储区是靠栈上的指针来间接操作的。sizeof 操作符,计算的是对象在栈上的投影体积;记住这个就很多东西都很清楚了。
#include "iostream"using namespace std;class Base { virtual void VirtualFun(); }; class D1:Base { int i; void NonVirtualFun(); }; class D2:D1 { D1 *pD2; }; class D3:D2 { static int i; static int GetIndex(); }; void main() { printf("%d\n",sizeof(Base));//4 虚函数(虚函数表)会占4个字节,一个类至少有1个字节(char型)来区分不同的类 printf("%d\n",sizeof(D1));//8 函数不算在内,int是4个字节 printf("%d\n",sizeof(D2));//12 比上一个多了一个指针 printf("%d\n",sizeof(D3));//12 static类型的变量(函数)不算在对象内,整个类共享 system("pause"); }
#include <stdio.h> int main() { printf("%d\n", sizeof(int)); // 4 printf("%d\n", sizeof(long)); // 4 printf("%d\n", sizeof(float)); // 4 printf("%d\n", sizeof(double)); // 8 printf("%d\n", sizeof(void*)); // 4 指针类型的为4 return 0; }
#include <stdio.h> #include<string.h> int main() { char *s="hello"; printf("%d\n", sizeof(s)); // 4 指针类型的为4 printf("%d\n", sizeof(*s)); // 1 指向字符串的首地址 为1 printf("%d\n", strlen(s)); // 5 长度为5 不包括'\0' //s[0]='a'; //编译时没有错误 但是运行时会出现停止运行 常量字符串 puts(s); return 0; }
0 0
- sizeof()和strlen()用法
- sizeof 和 strlen用法
- strlen 和sizeof的用法
- sizeof和strlen的用法
- sizeof 和strlen的用法
- _countof、sizeof、strlen的区别和用法
- 关于sizeof 和strlen 的用法
- strlen与sizeof的区别和用法
- 关于sizeof和strlen的一些用法
- strlen 和 sizeof 的基本用法(举例)
- sizeof()与strlen()用法
- sizeof,strlen用法详解
- 关于sizeof和strlen的区别和用法
- sizeof和strlen的一些用法和区别
- sizeof和strlen()
- 关于sizeof 和strlen
- sizeof 和 strlen区别
- strlen 和sizeof
- java160114ThreadTest
- 宇宙的边界
- 接口 Condition
- 【tyvj1330】笔记本电脑
- 接口 Lock
- sizeof()和strlen()用法
- 类 ReentrantLock
- 软件包 java.util.concurrent.locks
- 类 Object
- 补 3.8 与/或树的搜索策略
- [从头学数学] 第49节 除数是一位数的除法
- 1076: [SCOI2008]奖励关|状压动规|概率与期望
- 正则表达式笔记
- 组合查询