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

(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就是第二个元素的地址,得到的也是随机值

相关文章:

  • 关于功耗检测功能开发笔记
  • Python字符串对齐哲学探微与东方字符补偿算法(授权DeepSeek撰写)
  • uniapp生命周期vue生命周期有何异同?
  • XDP/eBPF来包过滤-已上机验证
  • UniApp 生命周期钩子的应用场景
  • es6什么是暂时性死区,为何会存在
  • 买卖股票的最佳时机(js实现,LeetCode:121)
  • 大模型tokenizer重构流程
  • el-date-picker时间范围 编辑回显后不能修改问题
  • RedisTemplate和RedissonClient适用的场景有什么不同
  • 2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)
  • 48days强训——day2
  • Axure RP9教程 :轮播图(动态面板) | 头部锁定
  • Python---数据分析(Pandas八:二维数组DataFrame数据操作一: 数据清洗,数据转换)
  • 掌握C#循环:for、while、break与continue详解及游戏案例
  • QT网络通信的接口与使用
  • 城电科技|景观光伏花 太阳能发电的景观光伏太阳花向日葵
  • 高校校园交友微信小程序的设计与实现【lw+源码+部署+讲解】
  • 接口自动化框架篇:自定义异常日志封装!
  • 【T2I】Divide Bind Your Attention for Improved Generative Semantic Nursing
  • 中国旅游日|上天当个“显眼包”!体验低空经济的“飞”凡魅力
  • 讲座预告|以危机为视角解读全球治理
  • 江西3人拟提名为县(市、区)长候选人
  • 恒生银行回应裁员传闻:受影响的员工数目占银行核心业务员工总数约1%
  • 党建评:对违规宴饮等问题要坚决露头就打
  • 多条跨境铁路加速推进,谁是下一个“超级枢纽”?