当前位置: 首页 > article >正文

(C语言)习题练习 (sizeof和strlen)

复习 sizeof

有关sizeof  在上一张中已经已经讲解了

在本章进行复习,更深入了解sizeof 的计算 

请各位读者老爷进行计算一下。看看各位的实力。

题目如下:

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };

	printf("%zd\n", sizeof(arr));

	printf("%zd\n", sizeof(arr + 0));

	printf("%zd\n", sizeof(*arr));

	printf("%zd\n", sizeof(arr[1]));

	printf("%zd\n", sizeof(&arr));

    printf("%zd\n", sizeof(&arr + 1));

	printf("%zd\n", sizeof(&arr[0] + 1));

	return 0;
}

公布答案:

1. sizeof(arr)    arr是数组名,单独放在sizeof内部.计算的是数组的大小  - 6 (a,b,c,d,e,f)六个

2. sizeof(*arr+0) arr是数组名,是数组首元素的地址, arr+0也是数组首元素的地址,是地址就是  4 /  8(在两种的环境下答案不一样)x64  x86

3.  sizeof (*arr)  arr是数组首元素的地址,*arr就是首元素.大小是1个字节

4.  sizeof(arr[1])    arr[1]是第二个元素,大小是1个字节

5.  sizeof(&arr)   &arr是数组的地址,数组的地址也是地址,大小是  4  /  8个字节(同2)

6.sizeof (&arr +1)&arr是数组的地址, &arr + 1 就 是跳 过整个数组,指向了 f 的后面. 4  /  8个字节

7. sizeof(&arr[0] + 1)   & arr [0] + 1是第二个元素的地址,大小就是  4  / 8

strlen

接下来就是strlen函数了,还记得定义嘛?

  • strlen:

    • strlen是一个函数,用于计算以空字符\0结尾的字符串中的字符个数。
    • 不包括字符串末尾的\0字符。
    • strlen在运行时计算其值,因此需要包含string.h头文件。
    • 参数必须是字符型指针(char*),且必须是以\0结尾的字符串。

晓得了定义,那么上习题!!

如下: 
#include <string.h>

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%zd\n", strlen(arr));//随机值;arr是首元素的地址,数组中没有\0,一直往后找,什么时候遇到\0不清楚
	printf("%zd\n", strlen(arr + 0));//随机值;arr是首元素的地址,arr+1依然是首元素的地址
	printf("%zd\n", strlen(*arr));//*arr是首元素,是'a' - 97,传给strlen函数,97会被当做地址.
	以97作为地址,会形成非法访问,程序会崩溃
	printf("%zd\n", strlen(arr[1]));//arr[1]是第2个元素,就是'b' - 98,传给strlen函数,98会被当做地址.同上,程序崩溃
	printf("%zd\n", strlen(&arr));//&arr是数组的地址,虽然是数组的地址,值和首元素的地址样.strlen依然是从第一个
	字符的位置开始向后找\0,会得到随机值.
	printf("%zd\n", strlen(&arr + 1));//&arr + 1是f后面的地址,什么时候遇到\0,依然不知道.随机值.
	printf("%zd\n", strlen(&arr[0] + 1));//&arr[0]+1就是第二个元素的地址,得到的也是随机值
	return 0;
}
公布答案: 

1. 随机值 因为在本数组中没有\0所以说它会一直往后寻找直到\0。

2. 随即值  arr是首元素的地址,arr +0仍然是首元素的地址

3.  崩溃    *arr是首元素,是'a' - 97,传给strlen函数,97会被当做地址.,以97作为地址,会形成非法访问,程序会崩溃

4.崩溃    arr[1]是第2个元素,就是'b' - 98,传给strlen函数,98会被当做地址.同上,程序崩溃 

5.随机值   &arr是数组的地址,虽然是数组的地址,值和首元素的地址一样.strlen依然是从第一个字符的位置开始向后找\0,会得到随机值.

随机值  &arr + 1是f后面的地址,什么时候遇到\0,依然不知道,所以还是随机值.。

7.随机值  &arr[0]+1就是第二个元素的地址,得到的也是随机值


http://www.kler.cn/a/600531.html

相关文章:

  • UE5摄像机震屏/晃动效果
  • 视频孪生技术赋能智慧交管建设:迈向实时实景的交通管理新时代
  • 参考apollo3 FLASH样例改写实际应用的接口函数(带磨损均衡处理)
  • OpenHarmony 入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
  • 如何使用QuickAPI生成带参数的数据API(基于原生SQL)
  • Docker多阶段构建:告别臃肿镜像的终极方案
  • AI Agent开发与应用
  • 可变形交互注意力模块(DIA-Module)及代码详解
  • 【C++】回调函数和回调对象
  • 学习 - C++ 全栈聊天项目(1)架构概述和登录界面
  • 从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.1.1大规模语料库构建(Wikipedia、Common Crawl清洗与分词)
  • 深入讲解 Windows 防火墙入站规则
  • stm32 外部中断实现
  • 深入剖析Java虚拟机(JVM):从零开始掌握Java核心引擎
  • 【象形柱状图】——1
  • TCP传输---计算机网络
  • WebSocket 的错误处理与断线重连
  • 26考研——图_图的基本概念(6)
  • Apache Spark - 用于大规模数据分析的统一引擎
  • QuecPython 网络协议之TCP/UDP协议最祥解析