导语:昨晚问了老师几个关于指针的很简单的问题,两个老师都怀疑我根本没听课qwq(事实上我听了两遍T_T),还和小伙伴讨论了好久,但是昨晚因为老师的话心态很崩溃,自己一个人背着妈妈偷偷哭了好久::>_<::哭到大脑缺氧1点才睡觉(结果今天九点才起来啊啊啊),说这些的原因是,学了好久指针都会问出简单智障的问题混淆简单概念(甚至让老师怀疑我根本没听课),可以看出博主真的不聪明甚至可以说很笨,但是今天仍然爬起来弄明白了这些问题,说明你也可以!我这样的笨蛋都学会了你也一定可以,加油呀!相信自己!
一、首先,什么是指针?
如果我有事要找住在酒店中的某个人,那我得先知道他具体住在酒店的哪里,比如他住在xx层房间号为x0x,根据他的住址我们就可以找到他。
内存就相当于一个大的酒店,而内存中存储的数据就相当于住在酒店房间的人,每个人住在不同的房间,同样每个数据被存储在不同的格子中;我们在编写程序的时候经常会由于需要去调用内存中的某个数据,但是很多时候不知道数据在哪,换言之,不知道数据的“地址”从而无法找到他。那么这时……
天空一声巨响,指针闪亮登场(好土哈哈哈哈)
指针指针,那它不就是指引的那根针嘛;指针之中存放的就是这个数据在内存中的地址,根据这个地址我们很容易就可以在内存中找到我们想要的数据。
二、关于指针的一些常规操作
1、定义指针变量
在指针前面写上指针指向的数据类型,同时*表示这是一个指针(如整型指针p写作int*p)
2、取地址
既然指针是存放地址的,那么我们要使指针指向这个数据,就需要取出数据的地址,并且将地址赋给指针变量,这里需要用到取地址符&
#include<stdio.h>
int main()
{
int i = 10;
int* p = &i;
return 0;
}
观察上面这个例子,定义i为整型变量,那么它在内存中占了4个字节(相当于4个格子,假设一个格子是一个字节),每个格子都有自己的地址,但是&i取出的是第一个格子的地址,因为我们已经定义了指针类型为int类型,那么它就会从第一个格子开始往后数四个。(好吧,其实我觉得电脑才是最懒的人)
与此同时,指针p同样需要在内存中占据空间,在32位中指针是4个字节,64位中指针是8个字节,我们假设这里的指针p是4个字节,那么指针p中就会存放上面 i 占据的四个格子中第一个格子的地址。