C语言指针域内存

计算机中:1个字节=8 byte;
32位代表32个地址总线,和操作系统的寻址地址有32个
一个地址代表一个字节;
1024字节=1K;32位最大管理内存4G;
1个字节占用8个二进制位;

内存交给操作系统管理;
main()函数是入口,操作系统(统一管理内存)通过入口执行代码,
操作系统除了给内存做编号,还做规划,64位。前48位作为用户,程序员调用用,剩余的供操作系统内核使用。
下图为64位操作系统的内存分配:
图中每一小格占一位,
ox0到0x7fffffffffffffff 是前48位
这里写图片描述

指针本质是内存地址;
&a(变量寻址) 变量a所占有内存的地址;变量就是个标识符,仅仅是标识作用。
*pa 指针变量(指针类型);

除了栈内存外,其余都是先声明的变量内存地址小;

数据段:存放全局变量,常量。

int类型占用 4个字节;
而且我们的寻址找的是首地址值。比如int类型连续占用四个字节。
编译器的优化功能(跟我们写代码的顺序不一样)而是将同一类型的放在一起:如下代码

  int a = 1;
  int *pa=&a;
   int *pb=&a;
  int b =2;
  a:oxfffffffde00;
  b:oxfffffffde04;
  *pa:oxfffffffde08;
  *pb:oxfffffffde10;

指针类型:
32位操作系统中,指针类型占4个字节。
64操作系统所有指针类型占8个字节。

(*qutrate) (3) //到这个地址取值。小括号表示一个整体,函数指针。

“`

(gdb) p pa
4=0x7fffffffddfegdbppa 4 = 3

“`指针运算(指针偏移量)
下图gdb调试 int型数组的结果,
操作系统会根据数据类型,来自动调节指针的偏移量。
这里写图片描述

char 类型的数组的偏移量为1个字节,注意的是char类型的数组以 \0结尾。“hi”是两个字节,但实际是三个字节,因为是以 \0结尾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值