《C语言从零开始单排上百强》
第六章 - 函数
📃 更新记录:???
❌ 勘误记录:暂无
📌 团队名单:王亦优
🌻 特别鸣谢:鹏哥、dhlwust2007、是落拓呀
📜 本文声明:由于作者水平有限,本文难免有错误和不准确之处,本人也很想知道这些错误,恳望读者批评指正!
一、指针的定义
0x00 何为指针
❓ 我们先来看看定义:
指针是编程语言中的一个对象,利用地址,他的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
📚 简单地说:指针就是地址,地址就是指针;
📌 注意事项:
① 指针就是变量,用来存放地址的变量(存放在之阵中的值都被当成地址处理);
② 一个小的内存单元大小为 1 个字节;
③ 指针是用来存放地址的,地址是唯一标识一块内存空间的;
④ 指针的大小在 32 位平台上是 4 个字节,在 64 位平台上是 8 个字节;
💬 指针的创建:
int main()
{
int a = 10; // 在内存中开辟一块空间
int* pa = &a; // 使用解引用操作符&,取出变量a的地址
// 👆 将a的地址存放在pa变量中,此时pa就是一个指针变量
return 0;
}
❓ 什么是指针变量
💡 指针变量就是存放指针的变量,这里的 int* pa 就是一个整型指针变量,里面存放了 a 的地址;
0x02 指针的大小
💻 32位平台:4 bit , 64位平台:8 bit ;
💬 验证当前系统的指针大小:
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(double*));
return 0;
}
二、指针的指针类型
0x00 指针类型
📚 int 型指针和 char 型指针都可以存储 a ;
int main()
{
int a = 0x11223344;
int* pa = &a;
char* pc = &a;
printf("%p\n", pa);
printf("%p\n", pc);
return 0;
}
🚩 运行结果:他们的运行结果是一样的
0x01 指针类型的意义
📚 指针类型决定了指针进行解引用时,能够访问的内存大小是多少;
💬 不同的指针类型,访问的大小不同:
int main()
{
int a = 0x11223344;
int* pa = &a; // 44 33 22 11 (至于为什么是倒着的,后面会讲。)
*pa = 0;// 00 00 00 00
char* pc = &a; // 44 33 22 11
*pc = 0; // 00 33 22 11
// 在内存中仅仅改变了一个字节
// 解引用操作时就不一样了
// 整型指针操作了4个字节,让四个字节变为0
// 字符指针能把地址交到内存中,
// 但是解引用操作时,只敢动1个字节
return 0;
}