sizeof关键字和strlen的比较
来源:互联网 发布:合肥怎么样知乎 编辑:程序博客网 时间:2024/06/05 06:53
首先sizeof()是一个关键字(在编译期间就运算了),他不是一个函数。
我们发现b的值没有变化。
strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。
sizeof(求内存大小)和strlen(求长度)的差异:
1、整形数组:
int a[] = { 1, 2, 3, 4 };
printf( "%p\n",a); //a代表首元素地址
printf( "%p\n",a+1); //a+1表示第二个元素的地址
printf( "%p\n",&a); //&a代表整个数组的首地址
printf( "%p\n",&a+1); //&a代表数组的地址,&a+1则跳过整个数组
printf( "%d\n", sizeof (a)); //a在sizeof()中代表整个数组, 16
printf( "%d\n", sizeof (a + 0)); //代表&a[0],32位下所有的地址大小都为4 4
printf( "%d\n", sizeof (*a)); //表示a[0],int占4个字节 4
printf( "%d\n", sizeof (a + 1)); //表示&a[1],32位下所有的地址大小都为4 4
printf( "%d\n", sizeof (a[1])); //表示a[1],int占4个字节 4
printf( "%d\n", sizeof (&a)); //代表整个数组的地址,32位下所有的地址大小都为4 4
printf( "%d\n", sizeof (&a + 1)); //因为&a代表整个数组地址,&a+1跳过整个数组,但还是一个地址
printf( "%d\n", sizeof (&a[0])); //表示a[0]的地址 4
printf( "%d\n", sizeof (&a[0] + 1)); //表示a[1]的地址 4
printf( "%d\n", sizeof (*&a)); //&a代表整个数组,再*引用访问这块地址,就相当于求取真个数组的大小 16
2、字符数组:
char name[] = "abcdef" ; //这时字符串不代表首元素地址,而是字符数组的一种初始化方式,并且字符串总是默认以’\0‘结尾
printf( "%d\n", sizeof (name[0])); //表示a,32位下char大小为1 1
printf( "%d\n", sizeof (&name)); //表示整个数组的地址,32位下地址就是4 4
printf( "%d\n", sizeof (*name)); //表示 a 1
printf( "%d\n", sizeof (&name+1)); //表示指向整个数组之后的一块空间,但还是一个地址 4
printf( "%d\n", sizeof (name+1)); //表示b的地址 4
printf( "%d\n", sizeof (name)); //代表整个数组,还要加上‘\0' 7
printf( "%d\n", strlen(name)); //求取字符串长度,不包括’\0‘ 6
printf( "%d\n", strlen(&name)); //代表整个数组的地址,&name==name,strlen遇到’\0‘停下 6
printf( "%d\n", strlen(&name + 1)); //是一个随机值,表示指向整个数组之后的一个地址,从这个地址开始向后寻找'\0',因为’\0‘位置不确定所以是随机值
printf( "%d\n", strlen(name + 1)); //表示b的地址
3、字符指针:
char *name = "abcdef" ; //字符串放在等号右边代表首元素地址
printf( "%d\n", sizeof (name[0])); //以下标形式访问,代表 a 1
printf( "%d\n", sizeof (&name)); //表示字符指针name的地址 4
printf( "%d\n", sizeof (*name)); //通过*访问,表示a 1
printf( "%d\n", sizeof (&name+1)); //表示指针name之后的一块地址 4
printf( "%d\n", sizeof (name+1)); //表示b的地址 4
printf( "%d\n", sizeof (name)); //代表a的地址, 4
printf( "%d\n", strlen(name)); //代表字符串首元素地址 6
printf( "%d\n", strlen(&name)); //表示指针name本身地址,因为从name开始向后’\0‘的位置不确定,所以是个随机值
printf( "%d\n", strlen(&name + 1)); //表示指针name本身地址之后的地址,因为’\0‘的位置不确定,所以是个随机值
printf( "%d\n", strlen(name + 1)); //代表b的地址 5
- sizeof关键字和strlen的比较
- sizeof和strlen的比较
- sizeof和strlen比较
- sizeof和strlen比较
- 转:sizeof和strlen的比较
- sizeof和strlen的区别比较
- 关键字sizeof()和函数strlen()
- 转载:strlen 和sizeof 比较
- sizeof和strlen比较学习
- sizeof和strlen 比较经典
- sizeof详解 sizeof与strlen的比较
- // 比较 strlen(str)和 sizeof(str)的不同
- // 比较 strlen(str)和 sizeof(str)的不同 2
- 比较分析与数组相关的sizeof和strlen
- C++ 之 strlen()和sizeof()比较
- strlen和sizeof的区别
- strlen和sizeof的区别
- strlen和sizeof的区别
- 最大长方形(二)
- 110:Sort Colors
- QueryPerformanceFrequency 和 QueryPerformanceCounter用法
- Python数据挖掘课程 一.安装Python及爬虫入门介绍
- Kaggle_1_Titantic
- sizeof关键字和strlen的比较
- mybatis 调用存储过程
- Android 常用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir
- poj 1201 1716 (贪心+树状数组)
- ajax学习
- 顺序表的实现
- Vegetable and Park
- 滚动字幕
- 使用FormatterRegister注册Formatter