sizeof和strlen的对比及练习题(超详细)
创造不易,可以点点赞吗~
如有错误,欢迎指出~
sizeof和strlen的对比
sizeof举例说明
sizeof计算int类型数据
(有关于数组)sizeof计算
strlen举例说明
strlen是C语言库函数,求字符串长度
函数原型: size_t strlen(const char*str);
strlen和sizeof功能上的鲜明对比
做点小改动:将arr大小变为20
但strlen函数可能会存在越界行为
如图arr数组中没有放置\0,内存中abc后面存放的是随机字符,strlen统计直到遇到\0才会停止,所有这时统计的值是随机的。
sizeof和strlen相关练习题
一维数组
int a[] = {1,2,3,4}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a+0)); printf("%d\n",sizeof(*a)); printf("%d\n",sizeof(a+1)); printf("%d\n",sizeof(a[1])); printf("%d\n",sizeof(&a)); 1https://www.bitejiuyeke.comprintf("%d\n",sizeof(*&a)); printf("%d\n",sizeof(&a+1)); printf("%d\n",sizeof(&a[0])); printf("%d\n",sizeof(&a[0]+1));
解析
字符数组
代码1
char arr[] = {'a','b','c','d','e','f'}; printf("%d\n", sizeof(arr)); printf("%d\n", sizeof(arr+0)); printf("%d\n", sizeof(*arr)); printf("%d\n", sizeof(arr[1])); printf("%d\n", sizeof(&arr)); printf("%d\n", sizeof(&arr+1)); printf("%d\n", sizeof(&arr[0]+1));
解析
代码2
char arr[] = {'a','b','c','d','e','f'}; printf("%d\n", strlen(arr)); printf("%d\n", strlen(arr+0)); printf("%d\n", strlen(*arr)); printf("%d\n", strlen(arr[1])); printf("%d\n", strlen(&arr)); printf("%d\n", strlen(&arr+1)); printf("%d\n", strlen(&arr[0]+1));
解析
代码3
char arr[] = "abcdef"; printf("%d\n", sizeof(arr)); printf("%d\n", sizeof(arr+0)); printf("%d\n", sizeof(*arr)); printf("%d\n", sizeof(arr[1])); printf("%d\n", sizeof(&arr)); printf("%d\n", sizeof(&arr+1)); printf("%d\n", sizeof(&arr[0]+1));
解析
代码4
char arr[] = "abcdef"; printf("%d\n", strlen(arr)); printf("%d\n", strlen(arr+0)); printf("%d\n", strlen(*arr)); printf("%d\n", strlen(arr[1])); printf("%d\n", strlen(&arr)); printf("%d\n", strlen(&arr+1)); printf("%d\n", strlen(&arr[0]+1));
解析
代码5
char *p = "abcdef"; printf("%d\n", sizeof(p)); printf("%d\n", sizeof(p+1)); printf("%d\n", sizeof(*p)); printf("%d\n", sizeof(p[0])); printf("%d\n", sizeof(&p)); printf("%d\n", sizeof(&p+1)); printf("%d\n", sizeof(&p[0]+1));
解析
代码6
char *p = "abcdef"; printf("%d\n", strlen(p)); printf("%d\n", strlen(p+1)); printf("%d\n", strlen(*p)); printf("%d\n", strlen(p[0])); printf("%d\n", strlen(&p)); printf("%d\n", strlen(&p+1)); printf("%d\n", strlen(&p[0]+1));
解析
二维数组
int a[3][4] = {0}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a[0][0])); printf("%d\n",sizeof(a[0])); printf("%d\n",sizeof(a[0]+1)); printf("%d\n",sizeof(*(a[0]+1))); printf("%d\n",sizeof(a+1)); printf("%d\n",sizeof(*(a+1))); printf("%d\n",sizeof(&a[0]+1)); printf("%d\n",sizeof(*(&a[0]+1))); printf("%d\n",sizeof(*a)); printf("%d\n",sizeof(a[3]));
解析
其中我们要理清
数组名的意义:
- 1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。
- 2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。
- 3. 除此之外所有的数组名都表⽰⾸元素的地址。
新绿MEHO: 文件操作
24k纯甄: 【JavaEE初阶】多线程7(面试要点)
Trouvaille ~: 博主的技术博客在内容上十分丰富,涵盖了该技术领域多个层面的要点,从基础概念到高级应用均有涉及,具备很强的知识综合性。
✿༺小陈在拼命༻✿: 博主的博文写得真是太精彩了!每一篇都充满了独特的思考和深邃的见解,仿佛引领我们进入了一个全新的领域。博主的笔触细腻且富有感染力,让人在阅读的过程中不断被吸引,仿佛与博主一同经历了一场思想的盛宴。博主的博文不仅内容丰富,而且结构清晰,逻辑严密,读起来令人陶醉。博主真的是一个才华横溢的创作者,期待您未来更多精彩的作品!
小ᶻZ࿆: 这篇文章实在是太棒了!内容丰富,论述清晰,代码实例更是琳琅满目,让人阅读起来津津有味。博主的专业素养和用心程度从中可见一斑,无疑为读者提供了一笔宝贵的知识财富。 文章从基础概念出发,由浅入深地阐述了编程的核心思想。在阅读过程中,我感受到了博主对编程的热爱和敬业精神,他/她用通俗易懂的语言,将复杂的编程知识讲解得淋漓尽致。这使得读者在阅读过程中既能够掌握知识,又能够保持兴趣。