指针的理解 — 1
一.什么是指针和地址什么关系1.把内存单元的编号称为地址地址也叫做指针。2.理解指针的2个要点指针是内存中最小单元的编号也就是地址。口语中的指针通常是指的是指针变量存放内存地址的变量。3.地址取出的是第一个字节的地址。通过第一个字节的地址找到后面的地址。4.地址是一个数值。5.本质上指针就是地址6.指针变量的大小在 32 位机器下是 4个字节在 64 位机器下8 个字节。int main() { char* pb NULL; int* pa NULL; double* pc NULL; long* pd NULL; printf(%zu\n, sizeof(pa)); printf(%zu\n, sizeof(pb)); printf(%zu\n, sizeof(pc)); printf(%zu\n, sizeof(pd)); return 0; }二.指针的类型的意义意义1下面用代码来说明指针的类型有什么作用 :int main() { int a 0x11223344; int* pa a; *pa 0; return 0; }我首先把 0x11223344 存到 a 里再把 a的地址交给 pa , 再解引用把 a 改为 0。*pa0 会发生什么呢然我们观察下内存。可以发现4个字节 的内容已经被改成了 0。那这次我换个指针类型。这次的结果呢可以看到时只有1个字节被修改了。通过两次的结果对比int * 修改了 4 个字节而 char* 修改了 1 个字节。那么就可以得出指针类型的意义其一虽然什么类型的指针变量都可以存地址大小也都是 4 或8 个字节但是指针变量的类型决定了被解引用操作时可以访问字节的字节数。意义2接着用代码说明 :int main() { int a 0x11223344; int* pa a; char* pc a; printf(pa %p\n, pa); printf(pa1%p\n, pa1); printf(pc %p\n, pc); printf(pc1%p\n, pc1); return 0; }可以看到char * 指针变量 1 跳过 1 个字节int * 指针变量 1 跳过了 4个字节。那么指针变量类型意义其二指针类型也可以决定指针变量在地址 1 或 -1 的时候决定指针跳过的字节数即指针变量的步长。在访问字节时就可以按照自己的需求决定要用什么类型的指针变量。最后补充一点指针变量的大小和指针变量指向的空间的大小是没关系的取决于存放一个地址所需要的大小。看到这里不知道有没有帮助到你最后感谢阅读byebye。