c语言中“sizeof”和“strlen”的区别

sizeof:

操作符,不是函数

计算变量所占的内存空间的大小,单位是字节,如果是类型的话,计算的是使用类型创建所占空间的大小。

只关注内存空间,不管什么类型。

strlen:

函数库函数):求字符串的长度,只能针对字符串(字符数组)

统计字符串中**"\0**"前的字符个数。关注是否有"\0",如果没有,会持续往后找 ,可能会越界。

例题:

int main(){

char arr1\[\]={'a','b','c'};

char arr2\[\]="a b c"; //末尾有隐藏的\0

printf("%zd\n",strlen(arr1)); //随机值,因为找不到\0会一直往下找,会出现随机值。

printf("%zd\n",strlen(arr2)); // 3

printf("%zd\n",sizeof(arr2)); // 3

printf("%zd\n",sizeof(arr2)); // 4

数组和指针:

整型数组:

数组名是首元素地址,除了"sizeof(数组名)"和"&(数组名)"

int main(){

int a\[\]={1,2,3,4};

pritnf("%zd\n",sizeof(a)); //16 因为数组名a单独在sizeof的内部 ,a表示整个数组。

pritnf("%zd\n",sizeof(a+0)); //4或者8 数组名+0还是首元素地址,看是X64,还是X86.

pritnf("%zd\n",sizeof(*a)); //4 a表示首元素地址,但是*a就是首元素a0

pritnf("%zd\n",sizeof(a+1)); //4或者8 首元素地址+1,表示a1.

pritnf("%zd\n",sizeof(a1)); //4 就是表示元素a1

pritnf("%zd\n",sizeof(&a)); //4或者8. &a--整个数组地址,只要是地址就是4或者8.

pritnf("%zd\n",sizeof(*&a)); //16 其中的*和&相互低消了,就是访问的整个数组a

pritnf("%zd\n",sizeof(&a+1)); //4或者8. &a+1--就是表示跳过整个数组后那个位置的地址。

pritnf("%zd\n",sizeof(&a0)); //4或者8.

pritnf("%zd\n",sizeof(&a0+1));//4或者8. 首元素+1就是第二个元素的地址。

以上有关只要是地址就是4或者8 的可以去看7月 30号"c语言中的指针变量大小,以及指针类型的意义"文章里面有介绍。

字符数组

int main(){

char arr\[\]={'a','b','c','d','e','f'};

printf(%d\n",sizeof(arr)); //6 数组单独放在sizeof里面表示整个数组

printf(%d\n",sizeof(arr+0)); //4或者8 数组名表示首元素地址

printf(%d\n",sizeof(*arr)); //1 arr表示首元素地址,*arr就是首元素

printf(%d\n",sizeof(&arr)); //4或者8 &(数组)是整个数组。

printf(%d\n",sizeof(&arr+1)); //4或者8 表示跳过整个数组后的位置的地址

printf(%d\n",sizeof(&arr0+1));//4或者8

printf(%d\n",sizeof(arr)); //随机值 若是没有发现**'\0'**就会继续往下找。

printf(%zd\n",strlen(arr+0)); //随机值

printf(%zd\n",strlen(*arr)); //'a'--97直接系统崩了,传给strlen,会以为97是地址,就去访问。

printf(%zd\n",strlen(arr1)); //同上

printf(%zd\n",strlen(&arr)); //随机值 取数组的地址

printf(%zd\n",strlen(&arr+1)); //随机值

printf(%zd\n",strlen(&arr0+1)); //随机值

return 0;

}

相关推荐
白狐_79810 分钟前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25832 分钟前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
Shell运维手记1 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
qq_448011161 小时前
C语言中的动态内存分配
c语言·开发语言·php
杨航 AI1 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型2 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
动词ing2 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
旖旎夜光2 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
叠层归一研究院3 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
小雨笙笙3 小时前
C语言:变量三属性——存储类型
c语言·开发语言