8月24日学习总结:
开启新篇章------指针,指针对于初学者来说是比较难懂的一章了,好在本次学习内容只是简单的结束一下初阶指针,慢慢地从简到难一步步去了解去剖析指针,本次学习分为两个部分:
(一)什么是指针?
在学习什么是指针之前先了解内存空间如何管理(什么是地址)?
将内存空间切割成内存单元(1单元1byte),将内存单元进行编号,其编号称为地址。
①指针就是内存单元的编号,也就是地址,口语中所说的指针通常是指指针变量,用来存放地址的变量。
②指针的大小:在32位平台(x86)是4个字节,在64位平台(x64)是8个字节。
补充知识点:sizeof操作符的返回值为无符号整形(unsigned int),打印时用%zu(%u)
cs
int main()
{
int* pa = NULL;
char* pr = NULL;
short* pt = NULL;
double* pe = NULL;
long* pg = NULL;
printf("%zu\n", sizeof(pa));
printf("%zu\n", sizeof(pr));
printf("%zu\n", sizeof(pt));
printf("%zu\n", sizeof(pe));
printf("%zu\n", sizeof(pg));
return 0;
}
(二)指针和指针类型
既然不同类型的指针变量的大小相同,是否可以将一个类型直接代替其他类型的指针变量吗?
答案当然是不能,那指针变量的类型有什么作用呢?
cs
int main()
{
int a = 0x11223344; //不同的进制的区别就是用不同的数码表示同一个数
//十进制 100
//十六进制 64
//二进制 0110 0100
//八进制 144
int* pt = &a;
char* pr = ( char* ) & a;
//将指针类型进行转换可能会报错,所以一般需要加上强制类型转换操作符
*pt = 0;
//*pr = 0;
return 0;
}

当给pr赋值0时:

当给pt赋值0时:

①指针类型决定了指针的被解析引用的时候访问几个字节
char类型占一个字节,int类型占四个字节。将int类型的指针变量改变改变4个字节,而char类型的指针变量改变只会改变一个字节。由此可以得出:指针类型决定了指针的被解析引用的时候访问几个字节。
②指针的类型决定了指针+-1操作的时候跳过几个字节,也就是步长的大小

当char*类型+1时跳过一个字节,而int*类型+1时跳过4个字节。所以指针的类型决定了指针+-1操作的时候跳过几个字节,也就是步长的大小。
注意:那么相同字节大小的类型就完全相同吗?答案当然不是
例如int*类型和float*类型
cs
int main()
{
int a = 0;
int b = 0;
int* pr = &a;
float* pt = &b;
a = 100;
b = 100.0f;
return 0;
}

由此可以得出:虽然保存的内容相同,但是保存的方式不同。