? ? ? ? 说到C语言的高潮部分,我认为我会选择指针,因为这真是一个十分神奇的东西,我会用博客的方式,来进行我学习指针的记录。
????????指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。简单的说人话——指针指向的是数据在内存(ram)中的地址。
? ? ? ? type*为指针变量,我们只需要用type*来当作变量的类型,就可以使用指针了。举个例子——
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 10;
int* p = &a;//p存的a的地址
printf("%d\n", a);//a的值
printf("%p\n", p);//a的地址
printf("%p\n", &a);//a的地址
printf("%d\n", *p);//*p相当于,本来p=&a,然后对其解引用,就“进入那个地址”,找到了a的值
printf("%p\n", &p);//p的地址
return 0;
}
? ? ? ? 我们可以看到,创建整型变量a,我们初始化为10,然后用?指针变量p来得到a的地址,然后分别打印出a的值,p的值,a的地址,*p的值,和p的地址,我们来看看他们是什么:
? ? ? ? 我们可以看到,a的值还是10,但p的值就是一串地址了;然后a的地址和p的值是一样的,所以说p里面存放的就是a的地址;但*p却是打印的a的值——这是因为我们对其进行解引用操作,所以说在p中(这个地址),解引用得到了值;然后打印p的地址,说明p这个指针变量是在内存空间中额外分配了另外一个空间,用于存储p(这个指针变量)的。相当于可以理解为在6E8这个地方存了一个指针变量p,但是p里面存的是6C4这个地址,也就是a的地址。?
?