C语言指针指针和数组笔试题(必看)

前言:

        前面介绍了指针的大体内容,如果接下来能够把这些代码的含义搞得清清楚楚,那么你就是代码king!

一维数组:

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));
printf("%d\n",sizeof(*&a));
printf("%d\n",sizeof(&a+1));
printf("%d\n",sizeof(&a[0]));
printf("%d\n",sizeof(&a[0]+1));

这些大家做做,答案应该都是什么?

        咱们可以谈论讨论:

        注:sizeof(arr)可以计算arr整个数组的大小!!

1、不必多说答案是16(一个整型数据占4个字节)

2、sizeof(a+0)这里表示的是第一个元素的地址的大小为4

3、sizeof(*a),a是一个指针,里面放的是一个地址(首元素的),解引用就相当于第一个元素,所以这里相当于计算一个元素大小为4个字节。

4、sizeof(a+1)表示首元素地址加一,也就是相当于第二个元素的地址,大小为4个字节。

5、sizeof(a[1])表示第2个元素的大小,大小是4个字节

6、sizeof(&a)表示取出a整个数组的地址,但是在a中保存的是首元素的地址,只有加减的时候才会跳过整个数组的大小,大小为4个字节。(不要被迷惑

7、sizeof(*&a)表示整个数组的地址放在指针中,也是一个整形指针大小为4个字节。

8、sizeof(&a+1)表示取出a整个数组的大小,然后向后跳过整个数组的大小,指向的是第a+4个元素的地址,大小是4个字节。

9、sizeof(&a[0])表示的是a[0]的地址,大小是4个字节。

10、sizoef(&a[0]+1)表示的是a[0]的地址,向后访问一个整型的大小地址,大小为4个字节。

字符数组:

	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));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));

直接开始分析!

注:strlen计算的是数组里面元素的个数!!

1、sizeof(arr)直接计算的是整个数组的大小,大小为6个字节

2、sizeof(arr+0)表示的是第1个元素的地址,地址的话是4个字节(千万注意表示的不是第1个字符

3、sizeof(*arr)表示的是一个字符指针,里面放的是第一个字符的地址并且解引用,就是第一个字符,大小为1个字节。

4、sizeof(arr[1])表示的是第二个字符,大小为1个字节。

5、sizeof(&arr)表示的是取出整个数组的地址,大小为4个字节。

6、sizeof(&arr+1)表示的是向后跳过整个数组的大小(6个字节)后的地址,大小为4个字节。

7、sizeof(&arr[0]+1)表示的是第二个元素的地址,大小为4个字节。

8、strlen(arr)表示的是计算整个字符串数组的长度,大小为随机值(注意里面没有\0,strlen读取到\0才终止

9、strlen(arr+0)表示的是从第一个字符开始往后读取,直到遇到\0停止,大小为随机值。

10、strlen(*arr),相当于strlen('a')。大小为随机值。

11、strlen(arr[1]),相当于strlen('a'),大小同样为随价值。

12、strlen(&arr)相当于&arr是取出整个数组的地址,但是里面存的还是首元素的地址,所以还是从首元素开始往后读,直到遇到\0停止,还是随机值。

13、strlen(&arr+1)表示的是跳过整个数组大小的长度,开始往后读遇到'\0'停止,还是随机值。

14、strlen(&arr[0]+1)表示的是从第二个字符开始往后读,遇到'\0'停止。

字符串:

        

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));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));

   最后再看一组:

1、sizeof(arr) 整个数组的大小,结果为7。(注意字符串中结尾自带'\0')。

2、sizeof(arr+0)   首元素的地址,结果为4。

3、sizeof(*arr)首元素,大小为1。

4、sizeof(arr[1])第二个元素,大小为1。

5、sizeof(&arr)整个数组是地址,大小为4.

6、sizeof(&arr+1)跳过整个数组后的地址,大小为4

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

8、strlen(arr),从第一个元素开始往后读,直到遇到'\0'停止,结果为6.

9、strlen(arr+0),和上一个一样的,大小为6。

10、strlen(*arr),相当于strlen(arr[0]),大小为随机值。

11、strlen(arr[1]),大小为随机值。

12、strlen(&arr),大小为6。

13、strlen(&arr+1),结果为随机值。

14、strlen(&arr[0]+1),是从第二个元素开始访问,直到遇到'\0'停止,结果为5。

熏帝们,到这还没有结束,等下期继续!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element-ui输入框和多行文字输入框字体不一样解决

element-ui的type"textarea"的字体样式与其他样式不同 <el-input type"textarea"></el-input> <el-input ></el-input>设置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…

linux排查思路

1.账号安全 who 查看当前登录用户&#xff08;tty本地登录pts远程登录&#xff09; w 查看系统信息&#xff0c;想知道某一时刻用户的行为 uptime 查看登录多久、多少用户&#xff0c;负载 1.查看用户信息文件/etc/passwd root:x:0:0:root:/root:/bin:/b…

删除MySQL中所有表的外键

方法一&#xff1a; 原理 查询schema中所有外键名称然后拼接生成删除语句 第一步&#xff1a; SELECT CONCAT(ALTER TABLE ,TABLE_SCHEMA,.,TABLE_NAME, DROP FOREIGN KEY ,CONSTRAINT_NAME, ;) FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA数据库名…

Vue 跨域代理设置

Vue CLI允许你通过项目根目录下的vue.config.js文件来定制devServer的配置。以下是一些常见的配置示例&#xff1a; module.exports {devServer: {// 跨域代理配置&#xff0c;解决开发环境API跨域问题proxy: {//匹配以api路径请求的URL&#xff0c;转发请求的服务器地址/api…

课时135:awk实践_逻辑控制_综合实践

1.3.8 综合实践 学习目标 这一节&#xff0c;我们从 网络实践、文件实践、小结 三个方面来学习 网络实践 简介 所谓的网络实践&#xff0c;主要是借助于awk的数组功能&#xff0c;进行站点的信息统计操作。准备网络环境 安装软件 yum install nignx -y重启nginx [rootloca…

Linux修炼之路之自动化构建工具,进度条,gdb调试器

目录 一&#xff1a;自动化构建工具make/makefile 生成内容&#xff1a; 清理内容&#xff1a; 对于多过程的&#xff1a; 对于多次make&#xff1a; 特殊符号&#xff1a; 二&#xff1a;小程序之进度条 三&#xff1a;git的简单介绍 四&#xff1a;Linux调试器gdb 接…

fpga 提高有什么进阶书推荐?

到FPGA中后期的时候就要开始接触&#xff0c;如&#xff1a;高速接口、光纤数字信号处理等项目实践了&#xff0c;那么我们可以读一些书进行提升&#xff0c;大家可以收藏下。 高速接口项目《嵌入式高速串行总线技术:基于FPGA实现与应用》作者&#xff1a;张锋 FPGA提升书籍推…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心&#xff1a;Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2]&#xff0c;然后面对OpenAI GPT-4o的挑衅&#xff0c;谷歌在大会上直接甩出大杀器Project Astra[3]…

第七节 ConfigurationClassParser 源码分析

tips&#xff1a; ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解&#xff0c;有难度和深度&#xff0c;也枯燥乏味&#xff0c;可以根据实际情况选择阅读。 位置&#xff1a;org.springframework.context.annotation.ConfigurationClassPars…

[LLM-Agents]浅析Agent工具使用框架:MM-ReAct

上文LLM-Agents]详解Agent中工具使用Workflow提到MM-ReAct框架&#xff0c;通过结合ChatGPT 与视觉专家模型来解决复杂的视觉理解任务的框架。通过设计文本提示&#xff08;prompt design&#xff09;&#xff0c;使得语言模型能够接受、关联和处理多模态信息&#xff0c;如图像…

winform在一个类中调用窗体的控件和方法的两个方式

第一: 在类中创建窗体对象的方式&#xff0c;通过对象调用控件或方法 eg: Form1 form1 new Form1(); form1.Button; //调用控件 form1.Method(); //调用方法 要注意&#xff0c;对应控件的Modifiers属性要设置成public . 第二: 在窗体Form类下定义静态变量(例如:form1)&…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

标题&#xff1a;用于自然驾驶行为识别的多注意力Transformer 源文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

linux创建私有docker仓库以及推拉

创建私有仓库&#xff1a; 1.下载 registry镜像。 2.执行 registry 镜像&#xff08;#为注释内容&#xff0c;\为换行&#xff09;&#xff1a; docker run -d \# --restartalways每次都是开机自动启动--restartalways \# --name registry 表示容器名--name registry \# 表示…

java读取shp文件,获取点位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";String destDir &quo…

【Muduo】TcpServer类

TcpServer统领之前所有的类&#xff0c;是用户直接使用的类。它通过ThreadPool管理所有的loopthread&#xff0c;保存所有的TcpConnection&#xff0c;保存用户提供的各种回调函数并向TcpConnection的Channel中注册回调。它负责监听指定的端口&#xff0c;并接受来自客户端的连…

ZeRO-3、模型并行、流水线并行适用情况

ZeRO-3 适用场景&#xff1a;参数量大但计算量相对均衡的情况。 主要特点&#xff1a; 参数分片&#xff1a;将模型参数、优化器状态和梯度在多个 GPU 上进行分片。显存优化&#xff1a;显著减少每个 GPU 上的显存占用&#xff0c;使得可以在较小的 GPU 上训练更大的模型。 …

思科模拟器--06.单臂路由升级版--多端路由互连实验--24.5.20

实验图纸如下: 第0步: 先放置六台个人电脑,一台交换机和一台2911路由器(千兆路由器(G0开头的)) 接着,用直通线将 PC0的F0,PC1的F0分别和交换机的F0/0, F0/1连接 交换机的F0/3和路由器的G0/0连接 PC2的F0,PC3的F0分别和交换机的F0/4, F0/5连接 交换机的F0/6和路由器的G0/1…

电脑连接爱快iKuai软路由之后,网卡没有正常获取到IP,无法访问爱快路由管理页?

前言 上一次咱们说到在爱快控制台上设置/辨认lan口&#xff0c;设置完成之后&#xff0c;其他的一些设置就需要在爱快iKuai软路由的管理页面上设置。 有些小伙伴会发现&#xff0c;当电脑连接上爱快软路由的lan口之后&#xff0c;电脑并没有正常获取到ip&#xff0c;导致无法访…

JavaScript表达式和运算符

表达式 表达式一般由常量、变量、运算符、子表达式构成。最简单的表达式可以是一个简单的值。常量或变量。例&#xff1a;var a10 运算符 运算符一般用符号来表示&#xff0c;也有些使用关键字表示。运算符由3中类型 1.一元运算符&#xff1a;一个运算符能够结合一个操作数&…

【Arthas】阿里的线上jvm监控诊断工具的基本使用

关于对运行中的项目做java监测的需求下&#xff0c;Arthas则是一个很好的解决方案。 我们可以用来 1.监控cpu 现成、内存、堆栈 2.排查cpu飚高 造成原因 3.接口没反应 是否死锁 4.接口慢优化 5.代码未按预期执行 是分支不对 还是没提交&#xff1f; 6.线上低级错误 能不能不重启…