数组和指针常见笔试题(深度剖析)
strlen和sizeof的区别
strlen是统计\0之前的字符个数,传递的是地址
sizeof是计算类型的字节数,其实在编译期间会通过类型来确定大小
下边我来讲一下常见的面试题,过程很详细放心观看
#include<stdio.h>#include <string.h>int main() {char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", strlen(arr));//随机值,因为strlen是遇到斜杠\0结束,统计\0之前的字符个数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));//随机值printf("%d\n", sizeof(arr));//sizeof统计的是字节大小(包括\0),记住数组名放在sizeof内部表示数组全部元素大小,所以是6printf("%d\n", sizeof(arr + 0));//arr+0和数组名arr不是一个意思,所以表示的是地址,4/8printf("%d\n", sizeof(*arr));//数组首元素地址解引用之后是数组首元素,1字节printf("%d\n", sizeof(arr[1]));//元素b,1字节printf("%d\n", sizeof(&arr));//整个数组的地址也是地址,4/8printf("%d\n", sizeof(&arr + 1));//跳过一个数组大小,还是地址4/8printf("%d\n", sizeof(&arr[0] + 1));//第二个元素的地址,注意[]优先级比&高return 0; }
#include<string.h> int main() {char arr[] = "abcdef";//这种就是数组结尾多了一个\0,本质还是数组printf("%d\n", strlen(arr));//6,统计\0之前的字符个数printf("%d\n", strlen(arr + 0));//还是6,起始地址是数组首元素地址//printf("%d\n", strlen(*arr));//err 不能放元素//printf("%d\n", strlen(arr[1]));//err t同理printf("%d\n", strlen(&arr));//还是6,因为数组的地址和数组首元素的地址相同,直接统计\0之前的字符个数printf("%d\n", strlen(&arr + 1));//随机值,跳过一个数组的地址,相当于后边是随机值printf("%d\n", strlen(&arr[0] + 1));//第二个元素的地址,5printf("%d\n", sizeof(arr));//7,统计字符个数+\0printf("%d\n", sizeof(arr + 0));//数组首元素地址,地址大小是4/8(32位或者64位机器的区别)printf("%d\n", sizeof(*arr));//数组首元素的地址被解引用,是数组首元素,1printf("%d\n", sizeof(arr[1]));//数组第二个元素,1printf("%d\n", sizeof(&arr));//数组的地址,大小是4/8printf("%d\n", sizeof(&arr + 1));//还是地址printf("%d\n", sizeof(&arr[0] + 1));//数组第二个元素的地址return 0; }
本节的内容基础之前写过,我把链接放在综这里有需要的可以看看,比如数组名那里就可以回顾一下指针的进阶_在指针中int*w,*p=*w是-CSDN博客文章浏览阅读1.7k次,点赞33次,收藏39次。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。1. sizeof(数组名),这里的数组名不是数组首元素的地址,数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。数组名是数组首元素的地址,arr[1]拿到的是arr1数组名,再使用下标就能访问数组的元素,很简单。2. &数组名,这里的数组名表示整个数组, &数组名取出的是整个数组的地址。是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。_在指针中int*w,*p=*w是https://blog.csdn.net/eixjdj/article/details/145118231
#include<stdio.h> #include<string.h> int main() {const char* p = "abcdef";//字符串结尾有\0printf("%d\n", strlen(p));//6,统计\0之前的printf("%d\n", strlen(p + 1));//5,从第二个地址开始// printf("%d\n", strlen(*p));//err,不能放非地址//printf("%d\n", strlen(p[0]));//err 和上边同理printf("%d\n", strlen(&p));//相当于是字符串首地址的地址,p指向一个地址,不确定什么时候遇到\0,是随机值printf("%d\n", strlen(&p + 1));//跳过整个数组的地址,随机值printf("%d\n", strlen(&p[0] + 1));//第二个元素的地址,5printf("%d\n", sizeof(p));//地址大小是4/8printf("%d\n", sizeof(p + 1));//第二个位置的指针,4/8printf("%d\n", sizeof(*p));//第1个元素,刚才讲过是1printf("%d\n", sizeof(p[0]));//第一个元素,1printf("%d\n", sizeof(&p));//地址大小是4或8printf("%d\n", sizeof(&p + 1));//地址大小是4或8printf("%d\n", sizeof(&p[0] + 1));//地址大小是4或8return 0; }
#include<stdio.h> #include<string.h> int main() {int a[3][4] = { 0 };printf("%d\n", sizeof(a));//sizeof数组名是整个数组大小,所以是3*4*4=48printf("%d\n", sizeof(a[0][0]));//这个是经典的二维数组的第一个元素,大小是一个整形4printf("%d\n", sizeof(a[0]));//是第一行数组的数组名,数组名放在sizeof是整个数组大小,所以是第一行的大小是4*4=16printf("%d\n", sizeof(a[0] + 1));//第一行数组的首元素的地址+1跳过一个整形,是第一行第二个元素的地址,4/8printf("%d\n", sizeof(*(a[0] + 1)));//解引用第一行第二个元素的地址,拿到这个元素,4printf("%d\n", sizeof(a + 1));//二维数组的数组名也是数组首元素的地址,二维数组的多行一维数组可以看成多个元素//那么可以理解为第一个元素的地址也就是第一行的地址,第一行的地址+1跳过这一行到第二行,成为第二行的地址,数组的地址是4/8printf("%d\n", sizeof(*(a + 1)));//第二行的地址被解引用,是第二行的所有元素也就是16printf("%d\n", sizeof(&a[0] + 1));//a[0]是第一行数组名,取地址是第一行数组的地址,+1是跳过第一行元素,成为第二行元素的地址,4/8printf("%d\n", sizeof(*(&a[0] + 1)));//对第二行数组地址解引用,拿到第二行的数组元素是16printf("%d\n", sizeof(*a));//a是数组首元素的地址,第一行的地址,解引用拿到这一行是16printf("%d\n", sizeof(a[3]));//这里不会越界访问,因为sizeof是在编译时查看括号内的类型而确定大小,并不会运算,所以还是16return 0; }
以上就是对常见笔试题的剖析,感谢一直以来支持我的人!!
相关文章:
数组和指针常见笔试题(深度剖析)
strlen和sizeof的区别 strlen是统计\0之前的字符个数,传递的是地址 sizeof是计算类型的字节数,其实在编译期间会通过类型来确定大小 下边我来讲一下常见的面试题,过程很详细放心观看 #include<stdio.h>#include <string.h>int …...
【Python爬虫(21)】从0到1:Python与MySQL的深度融合
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
使用 Jetty 构建 HTTPS 服务入门指南
在互联网安全越来越重要的今天,使用 HTTPS 为 Web 服务提供安全传输成为标准配置。Jetty 是一个高性能、易用且功能丰富的开源 Java HTTP 服务器和 Servlet 容器,能够轻松实现 HTTPS 支持。本文将结合代码实例,引导您快速搭建一个基于 Jetty 的 HTTPS 服务。 一、Jetty 简介…...
网络通信-最大传输单元-MTU,网络安全零基础入门到精通实战教程!
文章目录 MTU 引用MTU 介绍 定义MTU 与 VLAN TagVLAN Tag 处理方式 IP分片可靠传输MTU 之 PMTUD PMTUD介绍IP头的DF分片位 DF 0 可以分片DF 1 不可以分片 注意事项 MTU 引用 以太网最初对报文长度没有限制,网络层最大可以接收65535个字节,但是以太…...
【如何学习商城源码】
学习商城源码是一个系统而深入的过程,需要掌握多种方法和技巧。以下是一些建议,帮助你有效地学习商城源码: 一、搭建学习环境 准备开发工具 编程语言相关:根据商城源码使用的编程语言,安装相应的集成开发环境…...
在nodejs中使用ElasticSearch(一)安装,使用
使用docker安装ElasticSearch和Kibana 1)创建相应的data文件夹和子文件夹用来持久化ElasticSearch和kibana数据 2)提前创建好elasticsearch配置文件 data/elasticsearch/config/elasticsearch.yml文件 # Elasticsearch Configuration # # NOTE: Elas…...
封装一个vue3控制并行任务数量的组合式函数
一. 使用场景 使用环境: vue3 当需要处理多个异步任务时,想要控制并行异步任务的数量,不想所有任务同时执行导致产生性能上的问题, 比如当需要同时发起多个网络请求,但又不想一次性发出过多请求导致服务器压力过大或…...
SpringSecurity请求流转的本质
1. SpringSecurity核心源码分析 分析SpringSecurity的核心原理,那么我们从哪开始分析?以及我们要分析哪些内容? 系统启动的时候SpringSecurity做了哪些事情?第一次请求执行的流程是什么?SpringSecurity中的认证流程是怎么样的?1.1 系统启动 当我们的Web服务启动的时候,…...
JavaScript数组-数组中新增元素
在JavaScript开发过程中,数组是一种非常常用的数据结构,它允许我们以有序的方式存储多个值。随着应用需求的变化,我们经常需要向现有的数组中添加新的元素。本文将详细介绍几种向数组中新增元素的方法,并探讨它们的特点和适用场景…...
【AI工具之Deepseek+Kimi一键免费生成PPT】
1.打开Deepseek网页:DeepSeek 2.使用Deepseek获得一份PPT大纲(输入背景需求约束条件进行提问)如下图: 3.复制Deepseek输出的PPT大纲 4.打开Kimi网页:Kimi.ai - 会推理解析,能深度思考的AI助手 5.在Kimi中…...
基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频
运行环境 jdkmysqlIntelliJ IDEAmaven3微信开发者工具 项目技术SpringBoothtmlcssjsjqueryvue2uni-app 宿舍报修小程序是一个集中管理宿舍维修请求的在线平台,为学生、维修人员和管理员提供了一个便捷、高效的交互界面。以下是关于这些功能的简单介绍: …...
ok113i平台——更改根目录分区大小
问题:根目录的空间太小;目前只有992M(包含了home目录大小) 通过改下面三个文件任一个,三个都会同时更改,以配置各分区容量: /home/forlinx/OK113i-linux-sdk/device/config/chips/t113_i/configs/ok113i/l…...
DeepSeek 助力 Vue 开发:打造丝滑的右键菜单(RightClickMenu)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
IDEA CodeGPT 使用教程
IDEA CodeGPT 使用教程 CodeGPT 是一个 IntelliJ IDEA 插件,可以利用 OpenAI(或自建 AI 模型)来帮助开发者完成代码编写、优化、调试、解释错误等任务。以下是详细的安装与配置教程。 1. 安装 CodeGPT 插件 方式 1:从插件市场安…...
WLAN无线2.4G/5G频段划分和可用信道
互联网各领域资料分享专区(不定期更新): Sheet...
HTML/CSS中后代选择器
1.作用:选中指定元素中,符合要求的后代元素. 2.语法:选择器1 选择器2 选择器3 ...... 选择器n(使用空格隔开) 3.举例: /* 选中ul中的所有li */ul li{color: red;}/* 选中类名为subject元素中的所有li */.subject li{color: blue;}/* 选中类名为subject元素中的所有类名为f…...
自己安装一台DeepSeek的服务器
找一台还可以的Linux服务器,登录后执行: curl -fsSL https://ollama.com/install.sh | sh 等待安装完成: 执行命令,根据服务器能力安装不同版本的AI模型: ollama run llama3.2 下一步就开始对话吧: llam…...
StableDiffusion学习笔记——4、模型下载和学习
目录 大家好,我是阿赵。 继续学习StableDiffusion的使用。 这次来学习一下模型的相关知识 一、 什么是模型 之前我们了解过,在StableDiffusion里面生成图片或者视频,都需要先选择模型。模型用通俗的话来说,就是决定了…...
蓝桥杯班级活动
题目描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个 n 以内的正整数作为 id,第 i 名同学的 id 为 ai。 老师希望通…...
微软宣布 Windows 11 将不再免费升级:升级需趁早
大家都知道如果你现在是Windows 10 系统,其实可以免费升级到正版 Windows 11,只要你的电脑配置满足 TPM2.0要求。 而最近微软已经公布了 Windows 10 的最后支持时间,也就是今年10月14日,在这之后微软将不再对Windows 10负责&#…...
Java开发实习面试笔试题(含答案)
在广州一家中大公司面试(BOSS标注是1000-9999人,薪资2-3k),招聘上写着Java开发,基本没有标注前端要求,但是到场知道是前后端分离人不分离。开始先让你做笔试(12道问答4道SQL题)&…...
什么叫不可变数据结构?
不可变数据结构(Immutable Data Structures)是指一旦创建之后,其内容就不能被修改的数据结构。这意味着任何对不可变数据结构的“修改”操作实际上都会返回一个新的数据结构,而原始数据结构保持不变。 一、不可变数据结构的核心特点 不可变性:一旦创建后,数据结构的内容…...
3D与2D机器视觉机械臂引导的区别
3D与2D机器视觉在机械臂引导中的主要区别如下: 数据维度 2D视觉:仅处理平面图像,提供X、Y坐标信息,无法获取深度(Z轴)数据。 3D视觉:处理三维空间数据,提供X、Y、Z坐标及物体的姿态…...
Effective Go-新手学习Go需要了解的知识
不知不觉从事Golang开发已有4+年了,回顾自己的成长经历,有很多感悟和心得。如果有人问我,学习Golang从什么资料开始,我一定给他推荐"Effective Go"。《Effective Go》是 Go 语言官方推荐的编程风格和最佳实践指南,其结构清晰,内容涵盖 Go 的核心设计哲学和常见…...
解析DrugBank数据库数据|Python
一、DrugBank 数据库简介 DrugBank 是一个综合性的生物信息学和化学信息学数据库,专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护,提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和…...
Day3 25/2/16 SUN
【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…...
专题 - Java Stream API
概述 分类 数据源 任何位置。 如:集合、数组、文件、随机数、 Stream 静态工厂等。 支持的数据类型 整型、长整型、双精度浮点型基本数据类型。引用数据类型。流管道的数据处理流程 流管道必须要有终止操作。否则永不执行,只是一个静默的无操作指令。流管道是懒运算的。当执…...
【前端框架】vue2和vue3的区别详细介绍
Vue 3 作为 Vue 2 的迭代版本,在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别: 响应式系统 Vue 2 实现原理:基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时,Vue 会遍历…...
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3) 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…...
路由基础 | 路由引入实验 | 不同路由引入方式存在的问题
注:本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息,可以…...





