C语言中sizeof和strlen的区别与联系
2015-09-08 23:39
344 查看
C语言中sizeof和strlen的区别与联系
在学习C语言的时候发现经常将sizeof和strlen弄混淆,今天有遇到这个问题,所以查了一些资料,将他们总结在下面,虽然不是很全,但已经可以通过他们之间的比较来区开分了strlen:一般用来统计字符串中字符的个数
sizeof:一般统计对象所占的单元(字节)的个数,一般来说,般以8位二进制作为一个存储单元,所以字节数一般等于存储单元的个数。
比较项目 | sizeof | strlen |
返回值 | 整数 | 整数 |
参数 | 类型、数组、指针‘函数 | 数组 |
是否包含“\0” | 包含 | 不包含(以“\0结束”) |
本质 | 运算符 | 函数 |
计算时间 | 编译 | 运行 |
一般用途 | 统计存储单元个数 | 统计字符串中字符的个数,包括空格 |
2、用于数组时,表示数组所占的存储空间的大小,可以不用(),即:sizeof(name) = sizeof name,name为数组
#include <stdio.h> #include <string.h> #define PRAISE "What a super marvelous name!" int main(void) { char name[40]; printf("What's your name?\n"); scanf("%s",name); printf("Hello,%s.%s\n",name,PRAISE); printf("Your name of %d letters occupies %d memory cells.\n",strlen(name),sizeof(name)); printf("The phrase of praise has %d letters",strlen(PRAISE)); printf("and occupies %d cells.\n",sizeof(PRAISE)); return 0; }
上面为C Primer Plus上的一段示例代码可以比较出他们的不同之处
int sum(int ar[], int n) { int i; int total = 0; for(i=0;i<n;i++) { total += ar[i]; } printf("The size of ar is %zd bytes.\n",sizeof ar); return total; }
注意:sizeof后面的对象如果是实参数组名,则结果为该数组的存储空间,但sizeof如果为一个指向数组首元素的指针,则对于4字节地址的计算机系统,指针的大小为4字节
如以上的sum函数,ar是一个指向数组的首元素的指针,所以该函数输出的结果为4。
相关文章推荐
- 深入分析C++中声明与定义的区别
- 关于 const char* p , char const* p 以及 char * const p
- C++ 奇葩的空语句
- C++中 引用&与取地址&的区别
- 【面试算法系列】替换字符串中的空格为其他字符 - C语言实现
- C++中引用(&)的用法和应用实例
- effective c++:了解c++默默编写并调用了哪些函数
- C++浅拷贝和深拷贝的区别
- C++拷贝构造函数详解
- c++树,知道前序和中序求后序遍历
- C++的重载、隐藏和重写
- C++关联容器
- c++ g++3.4.5 g++4.8.2 由编译器引起的编译异常
- 黑马程序员-C语言-递归
- c++ 面试题
- 模拟ATM机(缺少文件操作部分,不能实现真正意义上的存储)
- 某点处的导函数值+c语言
- C++ nontrival class 值传递的机制。
- C++ nontrival class 值传递的机制。
- 项目7.3 计算一周工资