前言:指针可能是让很多小伙伴头疼的一件事,我其实也不例外,所以我就更想写出一系列的博文来理清我自己学习的思路,同样的,我希望通过我自己的梳理,能帮助到更多有需要的小伙伴!
指针初级
1.内存和地址的概念
其实计算机会把内存划分为一个个的小单元,这个每个单元是一个字节的大小,为了方便管理,这每个小单元都会给他一个编号,俗称地址(就如同宿舍的门牌号一样),而这个所谓地址,其实就是指针。
2.指针变量和地址
2.1:指针变量的创建
指针变量就是存放地址的变量,跟创建普通的变量几乎没区别。
int a = 10;
int* pa = &pa;
//pa即为指针变量。
//*在这里的意思就单纯代表我创建的这个变量是指针变量。
//int其实跟变量a有关系,他就代表着指针变量指向a,而a变量的数据类型是int
//可以通俗理解就是指针变量指向什么数据类型,那么在创建指针变量的时候就为什么类型
2.2:解引用操作符 “ * ” 和取地址操作符 " & "
其实每当我们创建变量的时候,都是在内存里边申请空间,而这个空间除了char等只有一个字节的数据类型外,都不止一个字节,每个字节都会有一个属于他们的地址,但一个变量a,比如像是 int 类型的,他有四个字节,通常的,会取这四个字节里边的第一个字节的地址为a变量的地址,也称首地址。那么要想获取a变量的地址,就要用到取地址操作符。而这个用取地址操作符取得的地址我们肯定是要将他放在一个变量里边的,这个变量就叫做指针变量,而要想获取这个指针变量里的数据,就要用到解引用操作符。额外的,解引用操作符还可以修改变量的值。
#include<stdio.h>
int main()
{
int a = 10;
int* pa = &a;//取地址操作符获取变量a的地址并存放在指针变量pa里边
printf("%d ", *pa);//用解引用操作符获取到指针变量pa里边的数据并打印
//修改值并打印
*pa = 100;
printf("%d ", *pa);
return 0;
}
2.3:指针变量的大小
这个部分可以简单一句话来理解,指针变量的大小和它指向的变量是什么数据类型无关,跟电脑有关,电脑是32位就代表有32个比特位,一个字节8个比特位,也就是四个字节,那在该环境下创建的指针变量的大小就是4个字节。64位的同理。

2.4:指针的加减运算和指针减指针运算
指针的加减运算通常和数组挂钩。我还是用伪代码加注释的方式说明。
int arr[ 5 ] = {1 , 2 , 3 , 4 , 5 };
int* pa = arr; //arr为数组名,代表着数组的首地址,也就是地址,
//
pa + 1 表示我pa向后移动一个单位,这里数组存放的 int 类型的数据,这个1就其实就是表示指针pa走过了int类型所占的字节的长度,也就是四个字节。也就指向了2这个数据的首地址。减法同理。
//
那么指针和指针想减的含义其实就表示的两个指针相隔的数据个数。
备注:未完待续,这是一个系列,我会长期更新,需要时间,尽请期待。
4868

被折叠的 条评论
为什么被折叠?



