C语言指针相关笔记

指针变量

p是指针变量,p的类型是int*(*说明p是指针变量,用int说明p指向的对象是int类型的)

c 复制代码
int a = 10;
int *p = &a; // p里存的是a的地址而a是int类型的

解引用操作符

通过p中存放的地址找到p所指向的对象,*p就是p指向的对象

c 复制代码
int a = 10;
int *p = &a;
*p = 20;           // 即a=20;解引用操作符,意思是通过p中存放的地址找到p所指向的对象,*p就是p指向的对象   
printf("%d\n", a); // 20

sizeof(数据类型)和sizeof(指针)--分析地址中存储的数据会用到

sizeof(数据类型)-->和机器字长有关,机器字长为64位时,sizeof(int)==4字节

sizeof(指针)==8 字节-->机器字长为64位时,不管是什么类型的指针结果都是8字节

c 复制代码
#include <stdio.h>
int main()
{
    int a = 10; // 向内存申请4个字节,存储10
    // 内存单元的编号-- > 地址-- > 指针,p用来存a的地址[地址也称为指针],所以p称为指针变量
    // p是指针变量,p的类型是int*[*说明p是指针变量,int说明p指向的对象是int类型的]
    int *p = &a;       // p里存的是a的地址而a是int类型的
    printf("%p\n", p); // 打印地址用%p
    *p = 20;           // 即a=20;解引用操作符,意思是通过p中存放的地址找到p所指向的对象,*p就是p指向的对象
    printf("%d\n", a); // 20

    // 注意区别!机器字长为64位的情况下:sizeof(int)==4
    // 而 sizeof(指针)==8 不管是什么类型的指针(指针变量的大小取决于一个地址存放的时候需要多大的空间)
    // 64位机器需要64个bit位存放地址即8字节
    printf("%zu\n", sizeof(p));      // 8字节
    printf("%zu\n", sizeof(char *)); // 8字节

    printf("%zu\n", sizeof(int)); // 4字节
    return 0;
}

补充:在VSCode-调试看变量a以及指针变量p中保存的的数据

前提:

  • 配置VSCode-launch.json文件
  • 下载 Hex Editor插件

变量a的值为10,其地址存放在指针变量p中,调试时点击p中所存地址打开后展示的是16进制数据

由于a中存放int型数据,64位机器字长下占用4个字节所以红框中的十六进制"0A 00 00 00"采用了小端存储要倒着看即00 00 00 0A,换为十进制就是10

再在监视窗口中输入"&p"显示指针变量的地址是"0x5ffe48",指针变量p中存放的是变量a的地址。在64位机器字长情况下地址的大小是8字节即下图右侧红框位置,也是小端存储所以倒着读可得a的地址是0x00000000005ffe44

相关推荐
charlie1145141911 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
handler011 小时前
Linux: 基本指令知识点(2)
linux·服务器·c语言·c++·笔记·学习
南境十里·墨染春水4 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水4 小时前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
lkforce5 小时前
MiniMind学习笔记(二)--model_minimind.py
笔记·python·学习·minimind·minimindconfig
三品吉他手会点灯5 小时前
STM32 VSCode 开发-C/C++的环境配置中,找不到C/C++: Edit Configurations选项
c语言·c++·vscode·stm32·单片机·嵌入式硬件·编辑器
三品吉他手会点灯6 小时前
C语言学习笔记 - 1.C概述 - 本讲内容概述
c语言·笔记·学习
是孑然呀8 小时前
【笔记】激光定位-激光切割指针偏移设置
笔记
中屹指纹浏览器9 小时前
2026指纹浏览器性能优化实战:多开稳定性与资源占用控制全解析
经验分享·笔记
水饺编程9 小时前
第5章,[标签 Win32] :获取设备环境的信息
c语言·c++·windows·visual studio