C 语言指针与作用域详解

一、指针基础概念

(一)指针的本质

指针是 C 语言中一个重要的概念,其本质是内存地址。在计算机内存中,每个字节都有唯一的编号,这个编号就是我们所说的内存地址,而指针变量就是用于存储这些内存地址的变量。

(二)指针的声明语法

基本数据类型* 标识符(=初始化);

  • 习惯上,指针变量名会以p开头,例如:int* p;表示声明一个指向整型数据的指针变量p
  • 指针变量的类型必须与它所指向的数据类型一致,这样才能正确地访问和操作对应内存空间的数据

(三)指针的内存大小

指针变量本身在内存中所占的空间大小取决于计算机的架构:

  • 在 x86 架构(32 位系统)中,指针占4 字节
  • 在 x64 架构(64 位系统)中,指针占8 字节

(四)特殊符号&的多重含义

  • 在指针中:代表取地址操作符,用于获取变量的内存地址,例如&a表示获取变量a的地址
  • 在引用中:代表引用声明,用于定义变量的别名
  • 按位与操作:对两个操作数进行按位与运算
  • 逻辑与操作(&&):用于逻辑表达式中,进行联言判断

(五)解引用操作

解引用操作是通过指针访问其所指向的内存单元中存储的值,形象地说就像 “偷家”—— 根据地址找到里面的东西。

  • 语法:*地址
  • 示例:若p是一个指向整型变量a的指针,那么*p就表示访问a的值

(六)特殊指针

  • 野指针:如同 “熊孩子”,是指向未定义或非法内存地址的指针。访问野指针会导致程序崩溃或产生不可预知的结果,是编程中需要极力避免的问题
  • 空指针:指向空地址的指针,在 C 语言中通常用NULL0来表示。空指针是一个合法的指针值,用于表示指针不指向任何有效内存地址

二、作用域概念

(一)作用域的定义

作用域是程序中定义的变量、函数等实体可以被访问的区域范围。在 C 语言中,作用域主要由花括号{}来界定:

{ // begin// 这里定义的变量、函数等只在这个花括号内有效// 代表一个作用域(在里面才有作用)
} // end 位置

(二)作用域的重要性

  • 作用域决定了标识符的可见性和生命周期
  • 在一个作用域内定义的变量,只能在该作用域及其嵌套的子作用域中访问
  • 当程序执行离开某个作用域时,该作用域内定义的自动变量会被销毁,内存空间被释放

合理理解和运用指针与作用域的概念,是掌握 C 语言编程的关键基础,有助于编写更高效、更安全的代码。在实际编程中,要特别注意避免野指针问题,合理规划变量的作用域,确保程序的稳定性和可靠性。

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

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

相关文章

解锁阿里云ACK:开启Kubernetes容器化应用新时代

引言:云原生时代下的 ACK 在当今数字化飞速发展的时代,云原生技术正以前所未有的速度改变着软件开发和部署的格局。随着企业对应用敏捷性、弹性扩展以及成本优化的需求日益增长,云原生已成为众多企业实现数字化转型的关键路径。在云原生的技…

【C++基础】内存管理四重奏:malloc/free vs new/delete - 面试高频考点与真题解析

在 C/C 编程中,内存管理是核心基础技能,而malloc/free和new/delete作为两套内存分配释放机制,是面试中高频出现的考点。 一、内存管理的 "双生花":基础概念解析 1.1 malloc/free:C 语言的内存管家 malloc全…

Dify+Ollama+QwQ:3步本地部署,开启AI搜索新篇章

如何来评价本地化部署的价值与优势分析: 成本优化与隐私保障 自定义搜索插件,告别信息过载 一键生成报告、分析,效率翻倍! 接下来我们就尝试跟随来部署本地的价值所在! 1:安装Ollama & 部署QwQ模型 1.1 安装O…

FAISS 简介及其与 GPT 的对接(RAG)

什么是 FAISS? FAISS (Facebook AI Similarity Search) 是 Facebook AI 团队开发的一个高效的相似性搜索和密集向量聚类的库。它主要用于: 大规模向量相似性搜索高维向量最近邻检索向量聚类 https://github.com/facebookresearch/faissFAISS 特别适合处理…

【Apache Doris 深度实战:从 MPP 架构到实时分析,解锁三大数据模型的性能优化秘籍】

一、安装部署 安装教程:GitHub地址 Doc文档:Apache Doris 简介 - Apache Doris 二、功能及作用 Apache Doris 是一款基于MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果…

MySQL主从复制与读写分离概述

前言: 在数据驱动的现代应用中,数据库面临高并发读写与海量存储的双重挑战。单一数据库实例在性能、可用性及扩展性上逐渐成为瓶颈。MySQL主从复制(Master-Slave Replication)与读写分离(Read/Write Splitting&#xf…

数据库-元数据表

1. 什么是元数据表元数据:数据的数据,用以描述数据的信息也是数据,被称为元数据2. 获取元数据的方法MySQL提供了以下三种方法用于获取数据库对象的元数据:show语句从INFORMATION_SCHEMA数据库里查询相关表(information…

【STM32】通用定时器PWM

STM32 通用定时器 PWM 输出完全解析(以 TIM3_CH1 为例) PWM 输出基本原理 PWM(Pulse Width Modulation)即脉冲宽度调制,是由定时器通过比较 CNT 与 CCR 寄存器实现的。 信号产生原理: ARR 决定周期&#…

python学习打卡:DAY 21 常见的降维算法

知识点回顾: LDA线性判别PCA主成分分析t-sne降维 还有一些其他的降维方式,也就是最重要的词向量的加工,我们未来再说 浙大疏锦行

基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战

目录 前言 一、需求描述 1、功能需求 2、技术实现流程 二、SpringBoot后台实现 1、控制层实现 2、区县数据返回 三、WebGIS前端实现 1、区位信息展示 2、天气信息展示 四、成果展示 1、魔都上海 2、蜀地成都 3、湖南桂东 五、总结 前言 在当今数字化时…

文心开源:文心大模型4.5系列全面开放,AI普惠时代加速到来

一场由4240亿参数模型领衔的开源盛宴,正在重塑中国AI生态的底层逻辑 2025年6月30日,百度如约宣布全面开源其旗舰产品——文心大模型4.5系列。一次性开源10款模型,覆盖从4240亿参数的MoE多模态巨无霸到轻巧的0.3B端侧模型,并同步开…

【运算放大器专题】基础篇

1.1 运算放大器是放大了个寂寞吗?—初识运算放大器 为了解决震荡问题,人为加了一些补偿网络之后导致的高频特性差 1.2欧姆定律和独立源 1正弦2方波3脉冲 电压源是平行于i轴的横线 1.3有伴源和运放缓冲器 有伴指的是有电阻,有伴是坏事&#…

英伟达 jetson nano 从NFS启动,使用英伟达提供的rootfs根文件系统

0、目标 为了方便驱动阶段的开发,并且使用英伟达提供的上层应用,这里希望使jetson nano 从NFS启动,同时使用英伟达提供的rootfs根文件系统。 1、硬件准备 确保jetson nano 板子和开发主机之间使用网线进行连接(保持板子和开发主…

广州华锐互动:以创新科技赋能教育,开启沉浸式学习​

在教育领域,广州华锐互动致力于打破传统教学的局限性,为师生们带来全新的沉浸式学习体验。广州华锐互动通过开发 VR 虚拟教学课件,将抽象的知识转化为生动、逼真的虚拟场景,让学生能够身临其境地感受知识的魅力 。比如在历史课上&…

Grok 4 最新技术评测与发布指南

TL;DR:马斯克跳过Grok 3.5直接发布Grok 4,计划在7月4日后上线,专注编程模型优化,这次"极限迭代"能否让马斯克在AI军备竞赛中翻盘? 📋 文章目录 🚀 Grok 4发布概况🏆 Grok…

为什么音视频通话需要边缘加速

⏩ 主要原因 ✅ 降低传输延迟 用户与边缘节点之间通常1-2跳即可完成连接,避免跨国、跨运营商长链路传输 保障音视频信令、媒体流快速到达,控制端到端延迟 ✅ 提升弱网环境下的连接稳定性 边缘节点具备链路优化、丢包补偿、转发中继功能 即使在WiFi切…

小架构step系列05:Springboot三种运行模式

1 概述 前面搭建工程的例子,运行的是一个桌面程序,并不是一个Web程序,在这篇中我们把它改为Web程序,同时从启动角度看看它们的区别。 2 Web模式 2.1 桌面例子 回顾一下前面的例子,其pom.xml的配置如下:…

LoRaWAN的设备类型有哪几种?

LoRaWAN(Long Range Wide Area Network)是一种专为物联网(IoT)设备设计的低功耗、长距离通信协议。它根据设备的功能和功耗需求,将设备分为三种类型:Class A、Class B 和 Class C。每种设备类型都有其独特的…

三维目标检测|Iou3D 代码解读一

本文对OpenPCDet项目中的iou3d模块中的iou3d_nms_kernel.cu代码进行解读,本次解决的函数是box_overlap,它的输入是两个包围盒,输出是两个包围盒在bev下的重叠面积,计算流程是 确定box_a和box_b的四个角落坐标 从包围盒中提取坐标值…

探索实现C++ STL容器适配器:优先队列priority_queue

前引: 在算法竞赛中,选手们常常能在0.01秒内分出胜负;在实时交易系统中,毫秒级的延迟可能意味着数百万的盈亏;在高并发服务器中,每秒需要处理数万条不同优先级的请求——这些系统背后,都隐藏着同…