c语言指针篇
p是地址 *p是解引用这个地址里面的数据假如 定义数组int a[5]{1,10000,3000,400000,5}; int *pa; *p1代表先运行*p等于1然后加1如果是*p1那么就是p地址加一个步长步长看p指针的类型这里是int就是四个步长而数组也是int类型所以就是到a[1]这个位置了那么值就是10000指针和指针变量是有区别的指针可以直接理解为地址指针变量是存放指针地址的一个地方。问题1int a0x11223344; char *pa;为什么int类型的指针也能被char类型的存放啥意思啊核心是理解指针变量的类型比如char*和它存储的地址值本身是两回事——char* p a并不是 “把 int 类型的指针存到 char 类型里”而是 “把 a 的地址指针存到char*类型的指针变量里”。先明确两个核心前提所有变量的地址指针本质都是内存编号不管是int a、char b还是double c它们的地址都是一串十六进制数字比如0x7ffeefbff5c4这个地址值本身没有类型只是一个内存位置的标识。指针变量的类型char*/int*约束的是 “解引用时的内存访问规则”指针变量的类型不限制 “能存哪个变量的地址”而是限制 “通过这个指针访问内存时一次读 / 写多少字节”。2. 「指针变量大小」≠「指针解引用访问的大小」这是最容易混淆的点也是指针类型的核心意义指针变量的大小4/8 字节是 “存地址” 需要的空间你理解的这部分完全对指针类型char*/int*的作用是 “解引用时访问多少字节”和指针变量本身的大小无关总结在 32 位系统中地址总线是 32 位地址值需要 4 字节存储因此所有指针变量不管char*/int*的大小都是 4 字节64 位系统中指针变量占 8 字节。正因为指针变量的大小固定且相等所以char*能存放int变量的地址不是 “存放 int 指针”—— 本质是 “同大小的容器能装下同一个地址值”而指针类型只影响解引用时访问的字节数不影响存储地址的能力。指针变量就是门牌号都是4位或8位的但是里面的房子可以是40平的例int float也可以是10平的char。