【指针和数组笔试题(1)】详解指针、数组笔试题

news2024/11/23 7:19:17

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 整型数组
  • 字符数组
    • 第一组题
    • 第二组题
    • 第三组题
  • 总结


前言

在计算之前要了解基本概念:

数组名的理解
数组名是数组首元素的地址
有两个例外
1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组中的大小,单位是字节。
2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址


整型数组

#include<stdio.h>

int main()
{
	int a[] = { 1,2,3,4 };
	
	printf("%d\n", sizeof(a));

a是数组名,数组名单独放在sizeof内部,计算的是整个数组的大小,4*4=16,size(a)大小是16个字节

printf("%d\n", sizeof(a + 0));

数组名a是数组首元素地址,a+0还是数组首元素地址,是地址就是4/8个字节

printf("%d\n", sizeof(*a));

*a=a[0],数组名a是数组首元素地址,*a就是首元素,求的是大小不是地址,整型的大小是4个字节

printf("%d\n", sizeof(a + 1));

数组名a是数组首元素地址,a+1是数组第二个元素地址,是地址就是4/8个字节

printf("%d\n", sizeof(a[1]));

a[1] = (a + 1),a是数组首元素地址,a+1是数组第二个元素地址,(a+1)就是第二个元素,就是求大小,整型数组大小就是4个字节。

printf("%d\n", sizeof(&a));

&a取出的是整个数组的地址,是地址就是4/8个字节

printf("%d\n", sizeof(*&a));

sizeof(*&a)=sizeof(a),这里的a表示整个数组,计算的是整个数组中的大小,单位是字节。4 * 4=16

printf("%d\n", sizeof(&a + 1));

&a表示整个数组的地址,&a+1表示跳过整个元素,依然是地址,是地址就是4/8个字节

printf("%d\n", sizeof(&a[0]));

&a[0]是数组首元素地址,4/8个字节

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

&a[0]是数组首元素地址,&a[0] + 1就是数组第二个元素的地址,4/8个字节

	return 0;

}

在x64的环境下就是8个字节,在x86环境下就是4个字节
通常使用的是x86环境
在这里插入图片描述

在这里插入图片描述

字符数组

第一组题

int main()
{
	char arr[] = { 'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));

arr单独放在sizeof内部,计算的是整个数组的大小,char类型的数组,单位是一个字节,1*6=6

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

arr表示数组首元素地址,arr+0依旧是首元素的地址,是地址,就是4/8个字节

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

arr表示数组首元素地址,*arr表示首元素,注意计算的不是地址,是大小,首元素的大小是1个字节

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

arr[1]=*(arr+1),arr[1]表示第二个元素,注意计算的不是地址,是大小,第二个元素得大小是1个字节

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

&arr是整个数组的地址,是地址就是4/8个字节

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

&arr是整个数组的地址,&arr+1表示跳过整个数组,依旧表示地址,是地址就是4/8个字节

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

&arr[0]是首元素的地址,&arr[0]+1是第二个元素的地址,是地址就是4/8个字节

	return 0;
}

在这里插入图片描述


第二组题

strlen是库函数
作用是求字符串长度,统计的是在字符串中\0之前的字符的个数
如果没有\0就会一直往后找

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
printf("%d\n", strlen(arr));

因为字符数组arr中没有\0,所以在求字符串长度的时候,会一直往后统计字符串长度,产生的结果是随机值
printf(“%d\n”, strlen(arr + 0));
//arr是首元素地址,arr+0还是首元素地址, 和第一个一样,还是随机值

printf("%d\n", strlen(*arr));
//错误代码

arr是数组首元素地址,*arr是数组首元素,就是’a’,'a’的ASCII码值是97,
strlen函数参数需要传地址,那就是将97作为地址传给strlen,strlen就从97这个地址往后统计字符串长度,这就非法访问内存了

//错误代码
printf("%d\n", strlen(arr[1]));

arr[1]是数组第二个元素,‘b’,访问的是’b’的ASCII码值是98,所以也是错误代码

printf("%d\n", strlen(&arr));

&arr是数组的地址,数组的地址和首元素的地址一样,所以传递给strlen函数后,依然是从数组的第一个元素向后统计字符串长度,随机值

printf("%d\n", strlen(&arr + 1));

&arr是首元素地址,&arr+1跳过整个数组,从数组最末端向后统计字符串长度,结果也是随机值

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

&arr[0] + 1是第二个元素地址,strlen从第二个元素地址向后统计字符串长度,结果也是随机值

	return 0;
}

在这里插入图片描述


第三组题

int main()
{
	char arr[] = "abcdef";//里面实际放有[a b c d e f \0]
printf("%d\n", sizeof(arr));

arr单独放在sizeof里面,计算的是整个数组的大小,单位是字节,
char类型的数组,单位是一个字节,1*7=7,结果是7个字节

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

arr表示首元素地址,arr+0还是表示首元素地址,是地址,就是4/8个字节

printf("%d\n", sizeof(*arr));//*arr=*(arr+0)=arr[0]

arr表示首元素的地址,*arr表示首元素,数组类型是char类型,单位是一个字节,所以首元素的大小是一个字节

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

arrp[1]表示第二个元素,大小是一个字节

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

&arr表示整个数组地址,地址是4、8个字节

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

&arr表示整个数组地址,&arr+1表示跳过整个数组,依然是地址,是地址就是4/8个字节

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

&arr[0]表示首元素地址,&arr[0]+1表示第二个元素地址,是地址就是4/8个字节

		return 0;
}

在这里插入图片描述

总结

以上就是第一部分的指针和数组笔试题和详细解释。

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

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

相关文章

小白到运维工程师自学之路 第五十八集 (zabbix监控数据库)

一、为server.Zabbix.com添加服务模板 二、配置数据库 cd /usr/local/zabbix/etc/ vim zabbix_agentd.conf 添加配置项 UnsafeUserParameters1 //允许所有字符的参数传递给用户定义的参数。 UserParametermysql.version,mysql -V //定义键值mysql.version&a…

Windows11的VTK安装:VS201x+Qt5/Qt6 +VTK7.1/VTK9.2.6

需要提前安装好VS2017和VS2019和Qt VS开发控件以及Qt VS-addin。 注意Qt6.2.4只能跟VTK9.2.6联合编译&#xff08;目前VTK9和Qt6的相互支持版本&#xff09;。 首先下载VTK&#xff0c;需要下载源码和data&#xff1a; Download | VTKhttps://vtk.org/download/ 然后这两个文…

word图自动编号引用

一.引用&#xff0c;插入题注&#xff0c;新建标签&#xff0c;图1-&#xff0c;这样生成的就是图1-1这种&#xff0c;确定 再添加图片就点击添加题注就行&#xff0c;自动生成图1-2这种 二.图例保存为书签 插入&#xff0c;书签&#xff0c;书签命名&#xff0c;如图1 三…

hashCode() 相关问题

# hashCode() 有什么用&#xff1f; hashCode() 的作用是获取哈希码&#xff08;int 整数&#xff09;&#xff0c;也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。 hashCode() 方法 hashCode() 定义在 JDK 的 Object 类中&#xff0c;这就意味着 Java 中…

【代码随想录17】平衡二叉树

题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 思路 定义一个方法计算给定root的树高度&#xff0c;注意区分…

数学建模-时间序列分析 实例

实例1销量数据预测和实例2人口数据预测实例3上证指数预测和实例4gdp增长率预测 数据-定义时间 不加置信区间清晰点 例二 实例3

Java实现获取客户端真实IP方法小结

Java实现获取客户端真实IP方法小结 在jsP里&#xff0c;获取客户端的IP地址的方法是&#xff1a;request.getRemoteAddr()&#xff0c;这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件&am…

tp6 实现excel 导入功能

在项目根目录安装 composer require phpoffice/phpspreadsheet 我们看一下郊果图&#xff0c;如下 点击导入excel表格数据 出现弹窗选择文件&#xff0c;控制台打开输出文档内容 前端layui代码 <form id"uploadForm" class"form-horizontal" encty…

Vmware+CentOS+KGDB内核双机调试

1.准备两台CentOS系统的vmware虚拟机 其中一台作为调试机&#xff0c;另一台则作为被调试机。如下图&#xff0c;CentOS7.9x64为被调试机&#xff0c;CentOS7.9x64-Debugger为调试机 2.配置串口设备 若虚拟机有串口设备&#xff08;如打印机&#xff09;&#xff0c;需要先删…

数据仓库设计理论

数据仓库设计理论 一、数据仓库基本概念 1.1、数据仓库介绍 数据仓库是一个用于集成、存储和分析大量结构化和非结构化数据的中心化数据存储系统。它旨在支持企业的决策制定和业务分析活动。 1.2、基本特征 主题导向&#xff1a;数据仓库围绕特定的主题或业务领域进行建模…

vscode设置java -Xmx最大堆内存

如果在vscode中直接运行java程序&#xff0c;想要改下每次运行的最大堆内存&#xff0c;按照如下修改 一、vscode安装java插件 当然前提是vscode在应用管理中已经安装了java语言的插件&#xff0c;Debugger for Java,如下图所示 二、CommandShiftP打开配置搜索框 三、搜索…

PCL+C++点云窗体显示实例

程序示例精选 PCLC点云窗体显示实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PCLC点云窗体显示实例>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 …

深度剖析数据在内存中的存储——C语言进阶

目录 一、数据类型介绍 1.1 整型家族 1.2 浮点型家族 1.3 构造类型 二、整型在内存中的存储 2.1 原码、反码、补码 2.2 大小端字节序 大小端存储的定义 为什么会有大小端字节序之分呢&#xff1f; 怎么判断一个当前机器的大小端 2.3 有符号和无符号的区别 三、浮点型…

网络安全秋招面试题+(含答案)

自我介绍 有没有挖过src&#xff1f; 平时web渗透怎么学的&#xff0c;有实战吗&#xff1f;有过成功发现漏洞的经历吗&#xff1f; 做web渗透时接触过哪些工具 xxe漏洞是什么&#xff1f;ssrf是什么&#xff1f; 打ctf的时候负责什么方向的题 为什么要搞信息安全&#xff0c;对…

人工智能在教育上的应用1-基于pytorch框架下模型训练,用于数学题目图形的智能分类

大家好&#xff0c;今天给大家介绍一下人工智能在教育上的应用1-基于pytorch框架下模型训练&#xff0c;用于数学题目图形的智能分类&#xff0c;本文将利用CNN算法对数学题目中的图形进行自动分类和识别。这种应用可以帮助学生更好地理解和解决与数学相关的问题。基于CNN的数学…

C++平衡搜索二叉树(AVL)

一、定义 AVL树本质上还是一棵二叉搜索树&#xff0c;它的特点是&#xff1a; 1.本身首先是一棵二叉搜索树。 2.带有平衡条件&#xff1a;每个结点的左右子树的高度之差的绝对值&#xff08;平衡因子&#xff09;最多为1。 搜索二叉树可能出现单边树的情况&#xff0c;导致…

JavaWeb 速通HTTP

目录 一、HTTP快速入门 1.HTTP简介 : 2.HTTP请求头 : 3.HTTP响应头 : 二、HTTP响应状态码 1.基本介绍 : 2.常见状态码 : 3.状态码的分类 : 4.完整状态码汇总 : 三、HTTP请求包和响应包 1.请求包分析 : 1 GET请求 (1) 说明 (2) doGet返回数据给浏览器 (3) form表单提…

网络安全合规与标准的主要发展方向

网络安全合规就是避免违反网络安全有关的法律、法规、规章、合同义务以及任何安全要求&#xff0c;标准在网络安全合规工作中扮演着重要的角色。 一、标准在网络安全合规体系中的地位作用 网络安全合规体系包括网络安全有关的法律、法规、规章、其他规范性文件、及合同义务等…

JavaWeb课程设计项目实战(07)——项目编码实践4

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 在本节教程中&#xff0c;我们实现删除学生的功能。当在学生列表中点击删除后即可删除某位学生并重新加载学生列表。所以&#xff0c;该操作实际包含两步&#xff1a; 1、删…

Java虚拟机——虚拟机字节码执行引擎 运行时栈帧结构

1 虚拟机字节码执行引擎 执行引擎是Java虚拟机核心的组成部分之一。"虚拟机"是一个相对于"物理机"的概念&#xff0c;这两种机器都有代码执行的能力&#xff0c;物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的。而虚拟机的执行引擎…