指针(Pointer)
还记得第一次接触指针是在大一的c语言学习中,当时学完之后只知道 * 就是代表的指针,但是至于其真实含义及用法还没有真正学会。这一次从零开始学习Java,又一次学习到了指针,因此对指针有了更多的认识,下面就是通过最近的学习我对指针的认知。
首先要讲指针,就不得不讲变量。因为指针中保存着变量的地址。
变量——计算机语言中能储存计算结果或能表示值的抽象概念
从字面上来看变量就是指可以进行变化的量。往深的说变量其实就是计算机存储临时数据时所创建的区域。在创建每一个变量的时候计算机都会给这个区域随机分配一个地址,这样系统就能通过这个地址找到这个临时区域,进而读取到只属于这个区域的临时数据。因为地址时系统随机分配的,因此直接访问地址从而获取临时数据时可能会产生错误,那为了避免这种情况,就引入了“变量名”这个概念,通过变量名 ->地址 -> 数据,这样就能解决上面的问题。
指针——编程语言中的一个对象
形象的说指针就是一种方法或者是工具,它能够利用地址使它的值直接指向内存中一个区域的值。又因为通过地址也能找到特定的变量单元(内存中一个区域的值),所以也可以将地址形象的成为“指针”。意思就是指针能够通过以它自身为地址从而找到变量,从而使系统访问到这个变量中的数据。
举一个非常简单的例子,操场上有一个由100名学生组成的10*10的方阵,我们只需要通过第几行第几列就能准确地找到这个学生,而这个“行”和“列'就可以称为指针。
下面我在c语言中用代码来表示指针,并且进一步解释。
#include<stdio.h>
void main() {
int a = 3; //创建一个普通变量a 将数值3赋予a
int b = 4; //创建一个普通变量b 将数值4赋予b
int* c; //创建一个指针变量c 指向b
c = &b; //将变量b的地址赋予c 找到所需的变量单元
int** d; //创建一个指向指针变量c的指针的指针变量d
d = &c;
printf("a的值=%d\n", a); //输出a的值=3
printf("b的值=%d\n", b); //输出b的值=4
printf("a的地址=%d\n", &a); //&为取地址符号 输出a的地址=20183372
printf("b的地址=%d\n", &b); //输出b的地址=20183360
printf("c的地址=%d\n", &c); //输出c的地址=20183348
printf("d的地址=%d\n", &b); //输出d的地址=20183360
printf("*c的结果=%d\n", *c); //输出*c的结果=4(b的值)
printf("c的值=%d\n", c); //输出c的值=20183360(b的地址)
printf("*d的结果=%d\n", *d); //输出*d的结果=20183360(b的地址)
printf("d的值=%d\n", d); //输出d的值=20183348(c的地址)
printf("**d的结果=%d\n", **d); //输出**d的值=4(b的值)
printf("%d\n", *&a); //输出3(a的值)
printf("%d\n", *&**&d); //输出20183360(b的地址)
}
以上就是我学习指针的所有心得。