当前位置: 首页 > news >正文

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.xdnf.cn/news/1084249.html

相关文章:

  • Clion中stm32开发烧录出现“monitor“ command not supported by this target.解决方法
  • 微服务基础:Spring Cloud Alibaba 组件有哪些?
  • 数据结构---链表结构体、指针深入理解(三)
  • nginx的使用
  • ARMv8 创建3级页表示例
  • Linux操作系统之文件(五):文件系统(下)
  • Windows ETW事件的多维度关联分析
  • Web攻防-XMLXXE无回显带外SSRF元数据DTD实体OOB盲注文件拓展
  • 【Elasticsearch】自定义评分检索
  • android 获取手机配对的蓝牙耳机的电量
  • python中生成假数据的库 faker 的详细使用,包括详细案例(生成逼真假数据)
  • Go语言实现双Token登录的思路与实现
  • 人工智能之数学基础:线性回归算法的矩阵参数求导
  • QueryWrapper 类的作用与示例详解
  • QT并发机制
  • 数学建模的一般步骤
  • 暑假复习篇之五子棋③【人机对战篇1】
  • Oracle使用SQL一次性向表中插入多行数据
  • 数据可视化中常用的图表类型 及其适用场景,涵盖基础到高级,帮助你根据数据类型和展示目标选择合适的图表:
  • 【论文笔记】【强化微调】Pixel Reasoner:早期 tool call 的调用
  • react当中的this指向
  • 【从0-1的CSS】第3篇:盒子模型与弹性布局
  • 《前端路由重构:解锁多语言交互的底层逻辑》
  • 3. lvgl 9.3 vscode 模拟环境搭建 lv_port_pc_vscode-release-v9.3
  • Paimon索引概述
  • vue3.4中的v-model的用法~
  • 支持向量机(SVM)在肝脏CT/MRI图像分类(肝癌检测)中的应用及实现
  • 从源码到思想:OneCode框架模块化设计如何解决前端大型应用痛点
  • Application的onLowMemory从Android API 34开始系统不再触发,从API 35开始废弃
  • 【BTC】协议(共识机制)