定义与赋值 | C指针基础(一)
C指针基础一什么是指针指针的意义为什么要多此一举总结定义指针变量基本格式为什么定义指针时需要指定类型名指针变量的赋值与*辨析pa、*pa 与 pa什么是指针指针说白了就是内存的门牌号。想象一下你住在一栋叫内存的大楼里每个房间都有一个门牌号。你想去朋友家串门光知道我朋友住在这栋楼里可没用——你得知道具体是几号房才能敲对门。在 C 语言里变量就是房间变量的值就是房间里住的人而指针就是那个门牌号——它告诉你这个变量住在内存的哪个地址。比如你写inta42;scanf(%d,a);这里的a就是取 a 的门牌号也就是 a 在内存中的地址。scanf拿到这个门牌号才能找到 a 的房间把用户输入的数字塞进去。如果你不给它门牌号只给它a的值比如 42那scanf就懵了“你给我个数字干嘛我要的是地址啊”指针的意义为什么要多此一举你可能会问“我直接用变量不就行了干嘛非要搞个指针”问得好指针的意义主要体现在三个场景1. 函数想改你的变量C 语言函数传参默认是值传递——你把a的值复制一份给函数函数改的是副本原变量纹丝不动。想让函数真正修改外面的变量就得把a门牌号传进去函数顺着门牌号找到原房间直接改。2. 动态内存管理程序运行时才知道要多大数组那就用malloc在堆上申请一块内存返回一个指针。指针就是这块内存的钥匙没有它你申请的内存就找不回来了。3. 高效传递大数据传一个巨大的结构体给函数如果按值传递得把整个结构体复制一份又慢又费内存。传指针就只传一个门牌号轻装上阵效率拉满。总结指针就是内存地址的化身它让你能直接按图索骥找到数据、修改数据、管理内存。虽然刚学时觉得绕但一旦掌握你会发现它其实是 C 语言最锋利的武器。定义指针变量指针变量是专门用于存放内存地址的变量。普通变量保存的是数据值而指针变量保存的是某个数据对象在内存中的地址。基本格式类型名*指针变量名;类型名表示该指针所指向的数据类型可以是int、float、char等基本类型也可以是结构体等自定义类型。*表明该变量是一个指针变量。指针变量名指针变量的名称遵循 C 语言标识符命名规则。例如int*p1;// p1 是指向 int 类型数据的指针float*p2;// p2 是指向 float 类型数据的指针char*p3;// p3 是指向 char 类型数据的指针以上都是合法的指针变量定义。需要注意星号*靠近变量名书写表示该变量是指针。若一次定义多个指针变量每个变量名前都必须带星号int*pa,*pb;// pa 和 pb 都是指针变量int*pc,d;// pc 是指针变量d 是普通 int 变量为什么定义指针时需要指定类型名指针变量存储的是地址但仅凭地址信息并不足以正确操作内存中的数据。类型名决定了两个关键方面1. 解引用时读取的字节数*p表示解引用操作即根据指针中保存的地址读取对应内存中的数据。一个int类型通常占 4 个字节而char类型占 1 个字节。若编译器不知道指针所指的类型就无法确定解引用时应读取多少个字节可能导致读取数据不完整或越界。2. 指针运算时的步长指针支持算术运算例如p 1。如果p是int *类型p 1的地址偏移量为 4 个字节恰好指向下一个int数据如果p是char *类型则偏移量仅为 1 个字节。只有明确指针的类型编译器才能正确计算指针运算的步长。指针变量的赋值指针变量与int、float等普通数据类型一样声明之后必须赋予一个合法的地址值。若声明后未初始化指针变量会保存一个不确定的地址值成为野指针后续解引用时可能引发未定义行为。指针变量可以在声明的同时初始化。需要特别注意的是赋给指针变量的值必须是地址而不是变量值。例如inta10;int*paa;// 声明时初始化pa 保存变量 a 的地址也可以先声明指针变量再单独赋值inta10;int*pa;// 先声明指针变量paa;// 再赋值赋的是变量 a 的地址 a在使用指针时必须严格区分pa与*papa是指针变量本身保存的是地址值例如a。*pa是解引用操作表示pa所指向的那个对象也就是变量a本身。对*pa的读写等价于对a的读写。int*pa;paa;// 给指针变量 pa 赋值赋的是地址*paa;// *pa 等价于 a此句演示 *pa 与 a 表示同一个对象与*与*是和指针紧密相关的两个单目运算符是取地址运算符用于获取某个变量在内存中的地址。*是解引用运算符用于通过地址访问该地址所指向的对象。典型用法如下inta10;int*paa;// a 取得 a 的地址pa 保存该地址*pa20;// *pa 根据 pa 中的地址找到 a并修改 a 的值上述代码中*pa 20;与a 20;作用相同。辨析pa、*pa 与 pa在指针表达式中pa、*pa、pa三个写法只差一个符号但含义完全不同。理解它们的区别是熟练使用指针的关键。先看一段完整示例inta100;int*paa;// pa 保存变量 a 的地址*pa200;// 通过 pa 修改 a此时 a 的值变为 200printf(%d\n,pa);// 输出 pa 保存的地址值也就是 aprintf(%d\n,*pa);// 解引用输出 a 的值即 200printf(%d\n,pa);// 输出指针变量 pa 自身的地址运行结果从运行结果可以看出pa、*pa、pa三者的数据并不相同可以这样区分pa指针变量本身它的值是变量a的地址即a。*pa解引用操作表示pa所指向的对象在这里就等价于a因此*pa 200实际是把a改成了200。pa取指针变量pa自己的地址。注意它和a的地址没有关系而是pa这个变量在内存中的存放位置。换句话说pa是“门牌号”*pa是“照着门牌号找到的房间”而pa是“存放这张门牌号的位置”。

相关新闻

c++学习(18):多线程基础

c++学习(18):多线程基础

//7. 多线程基础//并行模拟两个独立的门电路&#xff08;简单示例&#xff09;。#include <iostream> #include <thread> #include <vector> #include <chrono>// 模拟一个耗时计算 int simulateGate(int id, int delayMs) {std::this_thread::sleep_f…

2026/10/4 18:55:04 阅读更多 →
新手小白 Agent 开发第9课:从小白到独立开发,完整路线图与认知升级

新手小白 Agent 开发第9课:从小白到独立开发,完整路线图与认知升级

前 8 课&#xff0c;我们从装 Python 一直做到了网页版 Agent。这一课不再写新代码&#xff0c;而是帮你把零散的知识点串成一张地图&#xff0c;并纠正三个最容易让初学者走弯路的认知。一、完整路线图&#xff1a;6 个阶段如果你是零基础&#xff0c;照着这条线走&#xff0c…

2026/10/4 18:55:04 阅读更多 →
基于KindEditor的政务CMS多格式文档智能填充插件实战

基于KindEditor的政务CMS多格式文档智能填充插件实战

1. 先搞清楚&#xff1a;政务CMS里的"智能填充"到底要解决什么1.1 三个让人头疼的真实场景做政务CMS的朋友应该都有这种感觉&#xff1a;编辑器本身能用就行&#xff0c;真正麻烦的永远是"内容从哪里来、最后要变成什么"。而KindEditor恰恰又是国内政务CMS…

2026/10/4 18:54:03 阅读更多 →

最新新闻

芯片内置时钟RE超标破局:滤波失效的三大噪声路径与协同抑制

芯片内置时钟RE超标破局:滤波失效的三大噪声路径与协同抑制

1. 项目概述&#xff1a;当滤波失效时&#xff0c;芯片内置时钟的RE超标破局之道到底在解决什么问题&#xff1f; “当滤波失效时&#xff1a;芯片内置时钟的RE超标破局之道”——这个标题一出来&#xff0c;我就知道又是一个被EMC实验室逼到墙角的真实战例。RE&#xff0c;即R…

2026/10/4 21:12:18 阅读更多 →
AI Agent 技术全景深度解析:从代码搜索到记忆系统,TaoToken 统一 Key 打通多 Agent 协作链路

AI Agent 技术全景深度解析:从代码搜索到记忆系统,TaoToken 统一 Key 打通多 Agent 协作链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 21:11:17 阅读更多 →
SpringBoot多数据源配置,其实没你想的那么难

SpringBoot多数据源配置,其实没你想的那么难

很多后端开发一听到“多数据源”就头大&#xff0c;觉得要写一堆配置、切面、注解&#xff0c;还容易踩坑。其实&#xff0c;SpringBoot多数据源的核心就一句话&#xff1a;动态路由 多个DataSource Bean。搞懂这个&#xff0c;半小时就能跑起来。为什么需要多数据源&#xff…

2026/10/4 21:11:17 阅读更多 →
Java面试被问烂的10道题,答错3道直接挂

Java面试被问烂的10道题,答错3道直接挂

Java面试中总有一些题被反复问&#xff0c;候选人觉得“太简单”&#xff0c;面试官却用它快速筛人。原因很现实&#xff1a;这些题看似基础&#xff0c;却能暴露你是否真正理解Java的设计哲学。以下10道被问烂的题&#xff0c;答错3道&#xff0c;基本宣告面试失败。1. String…

2026/10/4 21:11:17 阅读更多 →
云桌面或无联网环境如何离线安装VS Code插件:TaoToken统一Key通道下的vsix手动部署与验证

云桌面或无联网环境如何离线安装VS Code插件:TaoToken统一Key通道下的vsix手动部署与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 21:10:16 阅读更多 →
一文详解Cache Aside(旁路缓存模式)

一文详解Cache Aside(旁路缓存模式)

最经典、最常用的缓存设计模式&#xff0c;业务代码自己维护缓存&#xff0c;缓存组件不感知数据库&#xff0c;缓存和 DB 相互独立&#xff0c;所以叫旁路。适用&#xff1a;Redis MySQL 这类组合&#xff0c;几乎所有业务系统都在用。旁路 缓存不在数据库读写的主链路里面&…

2026/10/4 21:10:16 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →