指针无疑是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个字节的地址