指针的大小及用法详解
📅 2026/8/2 6:30:43
👁️ 次浏览
一、指针的基本概念指针是C/C语言中一个核心且强大的特性它本质上是一个变量其存储的值是另一个变量的内存地址。通过指针程序可以直接访问和操作内存这为动态内存管理、数组操作、函数传参以及构建复杂数据结构如链表、树提供了基础。二、指针的大小指针的大小即存储一个内存地址所需的字节数并非固定不变它取决于目标系统的寻址空间和编译环境。1. 决定因素CPU架构与操作系统寻址空间这是最主要的决定因素。在32位x86系统上CPU的通用寄存器是32位宽可寻址2^324GB的内存空间。因此一个内存地址需要用32位4字节来表示所以所有类型的指针大小通常都是4字节。在64位x64系统上CPU的通用寄存器是64位宽理论可寻址2^64字节的巨大空间尽管操作系统和硬件会有限制。因此一个内存地址需要用64位8字节来表示所以所有类型的指针大小通常都是8字节。指针类型在同一个平台上指向不同类型如int*,char*,void*, 结构体指针的指针其大小是相同的因为它们存储的都是内存地址。指针的类型决定了编译器如何解释该地址开始的内存数据。函数指针在某些特殊架构或编译模式下函数指针的大小可能与数据指针不同但在主流的x86/x64系统上它们的大小通常与数据指针一致。2. 如何验证指针大小在C/C中可以使用sizeof运算符来获取指针变量的大小。#include stdio.h int main() { int *pInt; char *pChar; void *pVoid; double *pDouble; printf(Size of int*: %zu bytes\n, sizeof(pInt)); printf(Size of char*: %zu bytes\n, sizeof(pChar)); printf(Size of void*: %zu bytes\n, sizeof(pVoid)); printf(Size of double*: %zu bytes\n, sizeof(pDouble)); printf(Size of a function pointer: %zu bytes\n, sizeof(main)); // 在64位系统下以上输出通常都是 8 // 在32位系统下以上输出通常都是 4 return 0; }三、指针的核心用法1. 指针的声明与初始化int num 10; // 定义一个整型变量 int *ptr # // 声明一个整型指针并用num的地址初始化它 // ptr 现在存储了变量 num 的内存地址 // *ptr 可以访问或修改 num 的值2. 解引用操作使用*运算符解引用运算符来访问指针所指向地址处存储的值。int value *ptr; // 获取ptr指向地址的值此时value等于10 *ptr 20; // 修改ptr指向地址的值此时num的值被改为203. 指针与数组数组名在大多数情况下可以看作一个指向数组首元素的常量指针。int arr[5] {1, 2, 3, 4, 5}; int *p arr; // p指向arr[0] printf(%d\n, *p); // 输出 1 printf(%d\n, (p 1)); // 输出 2指针算术运算 printf(%d\n, p[2]); // 输出 3下标访问等价于(p2)4. 动态内存管理使用malloc、calloc、reallocC或newC在堆上分配内存返回的地址需要用指针来接收。使用完毕后必须用freeC或deleteC释放防止内存泄漏。// C语言示例 int *dynamicArray (int*)malloc(10 * sizeof(int)); if (dynamicArray ! NULL) { for (int i 0; i 10; i) { dynamicArray[i] i * i; } // 使用动态数组... free(dynamicArray); // 释放内存 dynamicArray NULL; // 避免野指针 }5. 指针作为函数参数传址调用可以通过指针在函数内部修改调用者变量的值。void swap(int *a, int *b) { int temp *a; *a *b; *b temp; } int main() { int x 5, y 10; swap(x, y); // 传递变量的地址 printf(x%d, y%d\n, x, y); // 输出 x10, y5 return 0; }6. 多级指针指针可以指向另一个指针用于动态二维数组、在函数中修改指针本身等场景。int val 100; int *p val int **pp p // pp是一个指向指针p的指针 printf(%d\n, **pp); // 输出 100通过两级解引用获取val的值7. 常量指针与指针常量常量指针指向常量的指针const int *p或int const *p。指针指向的值不能被修改但指针本身可以指向别的地址。指针常量指针是常量int * const p。指针本身存储的地址不能被修改但它指向的值可以修改。指向常量的指针常量const int * const p。指针和它指向的值都不能被修改。四、常见错误与注意事项野指针指针未初始化或指向已释放的内存。访问野指针会导致未定义行为程序崩溃、数据损坏。内存泄漏动态分配的内存未释放。指针越界访问了超出分配范围的内存。空指针解引用对值为NULL或nullptr的指针进行解引用操作。类型不匹配不同类型的指针相互赋值除void*外需要强制类型转换且需确保内存对齐和访问方式正确。五、总结指针的大小由系统架构决定32位系统4字节64位系统8字节与指向的数据类型无关。掌握指针的声明、初始化、解引用、算术运算以及与数组、函数、动态内存的结合使用是深入理解C/C编程的关键。同时必须谨慎处理指针避免野指针、内存泄漏等常见问题。
电动平板坡口机VS液压平板坡口机,2026谁更值得选?真实对比来了!“在2026年,如果需要购买平板坡口机,究竟是电动平板坡口机好,还是液压平板坡口机更值得入手呢?”这是很多用户在采购设备时都会面…
📅 2026/8/2 6:30:43
如果你正在寻找一个能帮你自动化处理日常任务、连接各种应用、甚至能自己写代码的本地AI助手,那么腾讯开源的OpenClaw项目值得你花时间了解一下。这次我们重点关注的,是它最新推出的“月度稳定版”和“成熟度评分卡”这两个关键更新。简单来说࿰…
📅 2026/8/2 6:30:43
1. 项目概述:Web安全中的“信息泄露”战场在Web安全攻防的世界里,信息泄露往往是最容易被忽视,却又最常被利用的突破口。它不像SQL注入那样直接操纵数据库,也不像XSS那样在用户浏览器里弹窗,它更像一个沉默的“内鬼”&…
📅 2026/8/2 6:30:43
1. 从“套壳”到千万美金ARR:一个非典型AI创业故事的起点如果你最近关注AI创业,大概率听过“套壳”这个词。它通常带着一丝贬义,指那些基于开源大模型或API,简单包装个界面就推向市场的产品,技术壁垒低,生命…
📅 2026/8/2 7:25:26
1. 从“能用”到“好用”:Excel表格的进阶之痛 如果你经常和Excel打交道,大概率遇到过这样的场景:一个表格,明明数据不多,公式也不复杂,但每次打开、计算或者保存时,电脑风扇就开始狂转…
📅 2026/8/2 7:25:26
在工业自动化、户外设备、新能源设备以及智能控制系统中,稳定可靠的连接方案是保障设备长期运行的重要基础。随着工业设备向小型化、高可靠性以及复杂环境适应方向发展,具备防护性能、快速连接能力和长期耐用性的圆形连接器线束组件越来越受到市场关注。…
📅 2026/8/2 7:25:26
1. 项目概述:当“神秘模型”遇上“被曝”真相最近几天,AI圈子里一个代号为“Pony Alpha”的模型突然火了。火得有点莫名其妙,又有点理所当然。说它莫名其妙,是因为最初关于它的信息极少,只有一些零星的测试截图和模糊的…
📅 2026/8/2 7:25:26
在FAST-LIO这类紧耦合的激光惯性里程计系统中,状态向量通常包含位置(ℝ中的平移)和姿态(SO(3)中的旋转)两种不同类型的量。这两类量的加法运算是互不相容的:平移可以用普通的向量加法直接叠加,旋…
📅 2026/8/2 7:25:26
WarcraftHelper魔兽助手:让经典魔兽争霸在现代电脑上流畅运行的终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper
还在为怀旧的…
📅 2026/8/2 7:24:25
1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…
📅 2026/8/2 0:00:48
温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…
📅 2026/8/2 0:00:48
1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同ÿ…
📅 2026/8/2 0:00:48
1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…
📅 2026/8/2 0:00:48
温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…
📅 2026/8/2 0:00:48
1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同ÿ…
📅 2026/8/2 0:00:48
AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言
HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…
📅 2026/8/2 1:22:12
无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut
在数字媒体创作领域,视频编辑处理的质量损…
📅 2026/8/2 0:02:59
1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…
📅 2026/8/2 1:22:12