要了解指针,首先要理解内存
目录
1、理解内存
1.1内存:
计算机上的 一种存储空间,我们可以在电脑上看自己电脑是多少内存的(8G/16G/32G)
程序在运行的时候,载入内存
程序中如果有数据需要存储,也会向系统申请内存空间,如图(框起来的就是运行时所占内存)
查看方法:ctrl + alt + delete,然后查看任务管理器
1.2内存如何使用
打个比方:
一栋教学楼有很多个教室,将这些教室编号,再对应各个班级。然后我们就可以通过教室编号,找到相应的班级。这些房间编号其实就是地址,在C语言里面就称为指针。如图:
内存:
那么,在内存其实也是这个思路。在系统中,把内存划分成了一个一个小的内存单元,在实践中,一个内存单元大小是一个字节,每个单元有着相应的编号,那么这个编号,就叫地址,同样的,在C语言里面称为指针。
在这里再讲一个拓展,如果访问一个内存单元,那么内存单元该如何产生呢?
现在我们的电脑大部分是64位操作系统,64位机器上就有64根地址线,64根地址线通电,将电信号转换成数字信号对应的就是二进制的0和1,这里我们画图以32位为例(64位相对较大 )。
了解了这些,我们下面就正式步入C语言的指针
2、指针简介
2.1、找变量的地址
在C语言里什么是指针?从根本看,指针是一个值为内存地址的变量。
我们先来看一段代码:
int main()
{
int a = 1;
printf("%zd", sizeof(a));
return 0;
}
我们创建了一个整型a,这个a的创建,就是在内存中申请了4个字节的空间(sizeof可计算出)。
int main()
{
int a = 1;
printf("%p\n", &a);
return 0;
}
接下来我们可以通过 & 这个符号(取地址操作符),取出a的地址,然后通过 %p 将其打印出来
a占4个字节,理应有4个地址,但我们发现,这只打印了一个地址。我们通过1编译器调试可看出,取出的地址为a所占内存的第一个字节的地址。
2.2、存放与使用变量地址
2.2.1、存放
我们现在已经知道了变量a的地址,如何将其存放起来 ,如图
int main()
{
int a = 1;
int* pa = &a;
printf("%p\n", pa);
printf("%p\n", &a);
return 0;
}
我们用一个变量pa来存放a的地址,然后 * 告知为指针(地址),前面a的类型为int,所以我们pa这个变量的类型也是int 。我们就可以通过pa,直接找到a的地址
2.2.2、使用
注意:这里*pa不是改变a的地址,而是通过解引用操作,直接找到了a,改变了a的值,但地址没有发生改变。
3、结语
初阶只需知道在C语言里,指针就是地址,然后如何简单的操作使用即可。
这次的内容就分享到这里,这也相当于我的一个笔记,有什么不足之处,请多多包涵;如果感觉对朋友们有些许帮助,点个赞支持一波。