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

ops/2025/4/2 15:27:41/

复习 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.ppmy.cn/ops/169851.html

相关文章

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

每日总结3.24

第十届蓝桥杯大赛软件赛省赛C/C 大学 B 组 183.完全二叉树的权值&#xff08;找规律&#xff0c;临界值&#xff09; #include <bits/stdc.h> using namespace std; int a[1000005]; int main() { int m;int d; cin>>m; int sum;int maxn0; for(int i1;i&…

基于Spring Boot的可信捐赠系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Python技术栈与数据可视化创意实践详解(三)

Python在数据可视化领域凭借丰富的库和灵活的生态系统&#xff0c;能够实现从基础图表到复杂交互式可视化的全场景覆盖。以下从技术选型、创意实现到实战优化进行系统化解析&#xff0c;并提供可直接落地的代码示例。 一、Python数据可视化技术栈 1. 基础与统计可视化 Matplotl…

同一个局域网的话 如何访问另一台电脑的ip

在局域网内访问另一台电脑&#xff0c;可以通过以下几种常见的方法来实现&#xff1a; ‌直接通过IP地址访问‌&#xff1a; 首先&#xff0c;确保两台电脑都连接在同一个局域网内。获取目标电脑的IP地址&#xff0c;这可以通过在目标电脑上打开命令提示符&#xff08;Windows系…

Vue-Study-区别开发模式和生产模式

1-关于目录下public/index.html文件和dist/index.html文件区分 开发模式&#xff1a;运行 npm run serve 时&#xff0c;加载的是 public/index.html。 生产模式&#xff1a;运行 npm run build 后&#xff0c;加载的是 dist/index.html。 public/index.html 是开发阶段的入口…

DAG是RDD划分完成后就生成了吗?

在 Apache Spark 中&#xff0c;DAG&#xff08;有向无环图&#xff09;并不是在 RDD 转换操作定义完成后就立即生成的&#xff0c;而是在触发 行动操作&#xff08;Action&#xff09; 时动态构建的。以下是详细解释&#xff1a; 1. DAG 生成的触发时机 转换操作&#xff08;T…

数据结构:交换排序的实现

概要 交换排序是一类通过比较和交换元素位置来实现排序的算法。其核心思想是在序列中进行两两比较&#xff0c;若元素顺序不符合排序要求&#xff0c;则交换它们的位置。常见的交换排序算法包括冒泡排序和快速排序&#xff0c;它们在不同场景下各有优劣。 整体架构流程 冒泡排…