【C语言进阶】指针例题大杂烩,阁下是高手还是菜鸟?

前言

首先说明,本文不适合新手,如果你刚刚接触指针,可以看看前五点,这是我认为指针中比较重要的细节,例题部分酌情尝试。

如果你自认为指针学的不错,胸有成竹,请尝试最后的例题,如果在不借助编译器的情况下正确率能达到百分之80,那么恭喜你,你已经是指针高手啦!!!

一.指针的概念

指针就是地址,是内存中每个字节空间的编号。

指针变量,是保存指针的变量。

口语表述所谈的指针,其实是指针变量。之所以会将两者混谈是因为,当指针变量做右值使用时,指针和指针变量的意义相近(指针变量的空间——左值;指针变量的内容——右值)。说明:下文我所谈的指针,通常是说指针变量,当我想说真正意义上的指针时,会用“地址”来表述

二.指针类型

指针很多类,int*, double*,  char*,还有数组指针,函数指针等。不同类型的作用在于,解引用访问的字节个数以及看待这块内存的方式不同,++,--跳过的字节数也不同

例如对char* 解引用,访问1个字节,对int*解引用,访问4个字节;对int* 解引用,看待这4个字节,最高为符号位,其余是数值位,对float解引用,这4个字节高位是阶码,低位是尾数。

三.空指针

 C语言中,NULL是一个宏值,定义为:#define NULL ((void *)0),而void* 可以赋给任意类型的指针

C++在NULL的定义上给自己挖了一个坑:#define NULL 0,这样会导致函数重载或者模版的类型推导时,将指针和整形类型混淆。所以C++11引入了一个nullptr的关键字,它是一个空指针常量,类型是nullptr_t(类似一个枚举类型)。

对空指针解引用会引发异常,这不是编译过程的问题,而是运行过程触发中断,操作系统向进程发送信号(集成在CPU上的MMU再进行页表转化时,访问0号地址的代码区,MMU转化失败,硬件异常)

四.数组的概念

 数组是具有相同类型的变量的集合

指针和数组在使用上非常类似,但它们是两个完全不同的概念

五.关于数组的若干概念辨析

 1.&arr[0] VS &arr

前者是数组arr的首元素的地址,即数组首元素最低字节的地址;后者是数组的地址,即数组的最低字节的地址。

二者在数值上是相等的,但是解引用访问的空间不同,++,--的步长也不同。前者解引用访问首元素,++是加上首元素的字节数,后者解引用访问整个数组,++是加上整个数组的字节数。

 2.字符串存储的两种方案

char arr[] = "hello world"

const char* p = "hello world"

前者是在栈区开辟一个数组,存储的是“hello world\0”,后者是在只读数据区开辟空间,存储“hello world\0”。

3.数组传参

数组传参会降为成指针,降维成指向其内部元素类型的指针。编译器这样处理是为了减少拷贝,提高效率。

六.例题

注意:以下结果均在32位平台验证,即指针大小为4个字节

1.sizeof和strlen结果

2.

 

 3.

4.

 

5.

6.

 

7.

 一定要画图!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

空间转录组SODB数据库(补充)

SODB数据库 SODB facilitates comprehensive exploration of spatial omics data | Nature Methods https://db.cngb.org/stomics/ a–f, SODB的整体设计。六个六边形总结了SODB的六个特点。SODB包含各种类型的空间组学数据(a)&#xff0c…

C++心决之类和对象详解(中篇)(封装入门二阶)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 7.const成员 8.取地址及const取地址操作符重载 1.类的…

Linux 目录遍历函数

目录遍历函数 DIR *opendir(const char *name); struct dirent *readdir(DIR *dirp); int closedir(DIR *dirp);// 打开一个目录 #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name);参数&#xff1a;- name: 需要打开的目录的名称返回值…

Spring AI教程(二)Chat API之基于数据库的多Key轮询

基于数据库的多Key轮询 在之前的文章中我们所使用的Key都是一个&#xff0c;但事实上&#xff0c;官方对Key会有一定的请求限制&#xff0c;在实际业务场景下&#xff0c;我们也不可能通过一个Key来保证我们的系统稳定运行&#xff0c;因为一旦超过请求限制&#xff0c;就会出现…

Laravel + ThinkPhP 海报生成

相关资料: 小程序 | EasyWeChat 二维码生成 public function test(){$config [app_id > appid,secret > secret,];$app Factory::miniProgram($config);$response $app->app_code->get(pages/index/index, [//二维码大小width > 150,//二维码颜色line_color…

React自定义Hook函数:高效组件开发的秘密武器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

恶心透了的小日子,害人终害己,国货呼吁关注抵制日本核废水排放

​|日本排放核废水 日本政府决定将福岛第一核电站的核污染水经过处理后排放入海&#xff0c;这一决定引发了多方面的担忧和反对&#xff0c;特别是在周边国家&#xff0c;包括中国和韩国。关于日本排放核污染水这一新闻事件&#xff0c;我们必须首先认识到&#xff0c;核能利用…

ES源码五:写操作流程(从Es到底层Luence,全网最细的一篇,全是硬货)

今天是玩转es的一天 创建索引 写入文档 入口BaseRestHandler BaseRestHandler是Rest请求的入口&#xff0c;你可以理解为spring mvc里面的controller一样prepareRequest是一个抽象方法&#xff0c;实际上是由各种Rest*Action来重写的&#xff0c;比如这里我们是对索引文档的处…

【C语言】strstr函数刨析-----字符串查找

目录 一、strstr 函数介绍 ✨函数头文件&#xff1a; ✨函数原型&#xff1a; ✨函数解读 ✨功能演示 二、函数的原理以及模拟实现 ✨函数原理 ✨函数的模拟实现 三、strstr函数的注意事项 四、共勉 一、strstr 函数介绍 strstr函数是在一个字符串中查找另一个字符…

K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

Ingress对象 1 &#xff09;概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象&#xff0c;典型的访问方式是 HTTPIngress-nginx 本质是网关&#xff0c;当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你&#xff0c;底层运行了一个 nginx但 K8s 为什么不…

GitOps 和 DevOps 有什么区别?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

C语言:数据结构(单链表)

目录 1. 链表的概念及结构2. 实现单链表3. 链表的分类 1. 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表的指针链接次序实现的。 链表的结构跟火车车厢相似&#xff0c;淡季时车次的车厢会相应…

六、项目发布 -- 4. 电子书详情页API开发、电子书列表API开发

电子书详情页API的编写 同理如下app.get中路由、回调&#xff1b;回调中要连接数据库、接收前端传过来的值、到数据库中做查询&#xff0c;然后回调&#xff08;如果回调失败返回什么JSON&#xff0c;如果回调成功返回什么JSON&#xff09;&#xff1b;最后千万别忘记了关闭数…

mapbox控制3D模型旋转

贴个群号 WebGIS学习交流群461555818&#xff0c;欢迎大家 效果 原理与源码 获取角度&#xff0c;然后一直更改角度&#xff0c;角度到达180度后赋值成-180度&#xff0c;然后转到开始获取的角度的角度的时候就停止旋转 function rotateModel(layerID){let bearing map.get…

2024.4.21周报

目录 摘要 Abstract 文献阅读&#xff1a;Next Item Recommendation with Self-Attentive Metric Learning 问题及方法 论文贡献 方法论 序列感知的推荐系统 神经注意模型 模型&#xff1a;ATTREC 序列推荐 基于Self-Attention的用户短期兴趣建模 用户长期兴趣建模…

卷积神经网络CNN入门

卷积神经网络应用领域 因为卷积神经网络主要应用场景就是计算机视觉任务&#xff0c;因此有必要简单介绍一下CV领域发展情况&#xff1a; 可以发现&#xff0c;在 ImageNet 图像数据集中分析图像的错误率十年间已经被深度学习给降低到了比人类&#xff08;HuMan&#xff09;识…

【matlab 代码的python复现】 Matlab实现的滤波器设计实现与Python 的库函数相同实现Scipy

实现一个IIR滤波器的设计 背景 Matlab 设计的滤波器通常封装过于完整,虽然在DSP中能够实现更多功能的滤波器设计但是很难实现Python端口的实现。 我们以一段原始的生物电信号EEG信号进行处理。 EEG信号 1.信号获取 EEG信号通常通过头皮电极,经过多通道采样芯片采样,将获…

35K的鸿蒙音视频开发岗位面经分享~

一个月前&#xff0c;阿里云在官网音视频终端 SDK 栏目发布适配 HarmonyOS NEXT 的操作文档和 SDK&#xff0c;官宣 MediaBox 音视频终端 SDK 全面适配 HarmonyOS NEXT。 此外&#xff0c;阿里云播放器 SDK 也在华为开发者联盟官网鸿蒙生态伙伴 SDK 专区同步上线&#xff0c;面…

OpenTelemetry-1.介绍

目录 1.是什么 2.为什么使用 OpenTelemetry 3.数据类型 Tracing Metrics Logging Baggage 4.架构图 5.核心概念 6.相关开源项目 ​编辑 7.分布式追踪的起源 8.百花齐放的分布式追踪 Zipkin Skywalking Pinpoint Jaeger OpenCensus OpenTracing 9.Openteleme…

「杭州*康恩贝」4月26日PolarDB开源数据库沙龙,开启报名!

4月26日&#xff08;周五&#xff09;&#xff0c;PolarDB开源社区联合康恩贝将共同举办开源数据库技术沙龙&#xff01; 时间&#xff1a;4月26日13:30 地点&#xff1a;浙江省杭州市滨江区滨康路568号康恩贝中心2楼 活动亮点 浙江英诺珐医药有限公司信息经理 朱常青 分享《…