简单了解指针

简介: 简单了解指针

指针无疑是C语言的精髓 - 要学习的指针,就要了解内存

一、内存是怎么编号的?

其实我们在讨论计算机时,计算机有32位/64位等机器

32位 - 32位地址线(物理线) - 通电(正负电) - 1/0

64位

拿32位来说可能就有2^32个以下的序列

00000000000000000000000000000000

01111111111111111111111111111111

11111111111111111111111111111111

电信号转换为数字信息:1和0组成的二进制序列

二、一个这样的内存单元是多大空间?

假设一个内存单元是1bit - 2^32bit

在计算器中计算得到:

1 0000 0000 0000 0000 0000 0000 0000 0000 - 2^32

4,294,967,296bit - 转换为十进制

536,870,912Byte - /8

524,288Kb - /1024

512Mb - /1024

0.5Gb - /1024

char - 1Byte - 8bit - 如果给每个bit都有一个地址 - 太浪费了

经过平衡后,以一个字节为内存单元,然后分配地址

三、地址

#include<stdio.h>
int main()
{
  //a在内存中分配空间 - 4个字节
  int a = 10;
  //输出地址 - %p 
  printf("%p\n", &a);
  //存放地址 - pa用来存放地址 - *说明pa是指针变量 - int说明pa执行的对象是int类型的 - pa这个变量的类型就是int*
  int* pa = &a;
  //使用 - 这颗星叫解引用操作符 - *pa就是通过pa的地址,找到a
  *pa = 20;
  printf("%d\n", a);//20
  return 0;
}

四、指针变量有多大?

#include<stdio.h>
int main0202()
{
  printf("%d\n", sizeof(char*));
  printf("%d\n", sizeof(short*));
  printf("%d\n", sizeof(int*));
  printf("%d\n", sizeof(long*));
  printf("%d\n", sizeof(float*));
  //发现不管是什么类型的指针都是4个字节大小?
  //因为指针是用来存放地址的
  //在32(x86)位机器下 - 指针是4Byte
  //在64(x64)位机器下 - 指针是8Byte
  return 0;
}

通过F10调试观察内存

1.F10调试

2.找到内存窗口 可以再把监视窗口也打开

完成以上步骤则会有两个窗口

3.将内存窗口设置为4列

观察相邻的两块内存地址

4.在内存窗口中是以十六进制的形式显示的,且每2个数字是1个字节

十六进制0a转换为十进制为10

在监视窗口发现取出的地址是内存中第1个字节的地址


相关文章
|
存储 小程序 编译器
C语言 - 深度剖析数据的存储 上
C语言 - 深度剖析数据的存储
241 0
C语言 - 深度剖析数据的存储 上
|
存储 C++
详解C文件操作
详解C文件操作
265 0
详解C文件操作
爆肝两万字,我爷爷都看的懂的《栈和队列》,建议各位观众姥爷先收藏 上
爆肝两万字,我爷爷都看的懂的《栈和队列》,建议各位观众姥爷先收藏
208 0
爆肝两万字,我爷爷都看的懂的《栈和队列》,建议各位观众姥爷先收藏 上
|
存储 机器学习/深度学习 算法
仅不到五万字轻松了解二叉树和堆 1
仅不到五万字轻松了解二叉树和堆
149 0
仅不到五万字轻松了解二叉树和堆 1
|
存储 算法
仅不到五万字轻松了解二叉树和堆 2
仅不到五万字轻松了解二叉树和堆
159 0
仅不到五万字轻松了解二叉树和堆 2
|
存储 C语言
C语言 - 隐式类型转换
C语言 - 隐式类型转换
219 0
|
网络协议 Shell 数据安全/隐私保护
|
2天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。