第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然小伙伴们也可以通过数据的复制达到相同的效果,但是这样往往效率不太好。因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。
但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。
第二,指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。
第三,有些 *** 作必须使用指针态悉。如 *** 作申请的堆内存。还有:C语言中的一切函数调用中,值传递都是“按值传递”的。如果要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。
扩展资料
指针的表现形式是地址,核心是指向关系指针运算符“*”的作用是按照指向关系访问所指向的对象.如果存在A指向B的指向关系,则A是B的地址,“*A”表示通过这个指向关系间接访问B。
如果B的值也是一个指针,它指向C,则B是C的地址,帆差乎“*B”表示间接访问C如果C是整型、实型或者结构体等类型的变量或者是存放这些类型的数据的数组元素,则B(即C的地址)是普通的指针,称为一级指针,用于存放一级指针的变量称为庆含一级指针变量。
参考资料来源:百度百科-指针
指针的用途非常广泛,比如如果你唤凯想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率。简单地说指针就是指向变量和对象的地址。
基本说明:
1、在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个哗友内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等;
2、为了正确地访问这些内存单元,须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。既然根据内存单和芦唤元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。
指针可以快速访问数组中的元素,想访问下一个,就自加1,上一个就自减1,下一行就自加一行,上一行就自减一行,特别适用快速逐点处理图像,如:unsigned char img[1024][768],*pint i,jp=(unsigned char *)imgfor ( i=0i<1024i++) for ( j=0j<768j++,p++ ) *p+=16
指针还可以用不同类型来访问同一组数据键清:
unsigned char a[4],*punsigned int *qp=a*p=0x12p++*p=0x34p++*p=0x56p++*p=0x78q=(unsigned int *)aprintf("%xH",*q)会输出十六进制数78563412H
另外指针可以用于给函数传递数组起始地址、结构地址、类地弯铅址、结构数组地址,这些稿闹前复杂数据组合,函数返回值也是这样,另外利用指针还能不从数组起始地址开始传入数组。比如:char str[]scanf("%s",str)printf("%s\n",str+1)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)