指针的妙处

这次比赛,我算是明白了指针是有多吊了。

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 [1] 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。 [2]
在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或*处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。
——百度百科

当我们要进行数组交换的时候,是不是发现这样子时间会很慢。

memcpy(c,a,sizeof(a));
memcpy(a,b,sizeof(b));
memcpy(b,c,sizeof(c));

但如果我们用指针来搞的话:

int a[N],b[N],*c=a,*d=b;
......
swap(c,d);

只需要这样子就可以实现交换了。
但我们要注意的是,指针只能代替一维:

int a[N][N],*c=a;//这样子是错误的
int a[N][N],*c=a[N];//这样子才可以

有些东西看似没有什么用处,其实只是你看不到而已。

上一篇:kubernetes的Ingress


下一篇:C中的IPv6地址复制优化