指针
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。这个是百度百科解释。其实我们只要将指针想象成一条绑着石头的绳子,绳子的一端是这个指针变量,绳子的另一端就是指向的数据地址。(图中指针指向数据1)
指针定义
指针也是一种数据类型,它的定义方式和他们一致,都是要先声明类型,再定义变量。指针内部也是分整型指针(int),浮点型指针(float),字符型指针(char*)等。对应数据类型指针指向对应数据类型数据,不然会出现警告,读取数据也会出错。
int* ptr; //定义指针变量
int a = 20; //定义整型变量
printf("a = %d\n",a); //打印a的值
ptr = &a; //指针与数据关联
*ptr = 10; //通过指针修改数据
printf("a = %d,*ptr = %d\n",a,*ptr);//打印a的值,*ptr的值

&:取址符 &a表示把a的地址拿到。
指针在定义时的指向未知,我们要把想要指针指向的数据的地址拿到,然后让指针指向这个地址(ptr = &a),就可以通过指针间接修改a的值(ptr = 20),可以想象指针有指向后,(ptr)可以顺着绳子找到a,就可以修改a。
指针大小
指针与普通数据类型一样,也有自己的内存空间。整数类型指针,还是字符类型指针都统称为指针,字节大小都一致。指针在32位平台上是4个字节,在64位平台是8个字节大小。

判断带有*时是定义还是赋值
这个主要看*前面有无数据类型的定义,如果有就是定义,没有就是操作指针指向的内存。
int a;
int* ptr; //前面有int数据类型,为定义
ptr = &a;
*ptr = 10; //前面没有数据类型,为操作指针内存
ptr与*ptr的不同
ptr是一个整型的指针,他是一个变量,可读可写。*ptr是指获取ptr指向的数据,这是一条指令,不是一个变量。两者是完全不同的东西。
*ptr; //无意义
*ptr = 2; //间接修改值
int b = *ptr; //将指针指向的数据赋值给变量
指针的使用
在c语言的学习中,指针占7成左右,指针是c语言的灵魂,学会指针,c基本就可以出师。指针在数组指针,指针数组,函数指针,作为形参指针传值,链表的使用等都可以用到。
注意事项
在使用指针时,需要注意的是不能操作非法内存,就是不能有操作野指针的存在(指向非法内存的指针),否则会造成段错误(段错误就是指访问的内存超出了系统所给这个程序的内存空间)。就是在指针没有指向实际的可操作内存时,使用指针间接修改内存就会造成段错误。这个问题是很严重的,操作非法内存会出现一系列错误,要杜绝这个问题的出现。在大部分涉及指针的程序出错基本就是这个问题。
解决办法就是指针赋初值为空,在需要操作内存时判断是否为空,不为空则操作内存。
int* ptr = NULL; //赋初值为空
if(ptr != NULL) //判断是否为空
{
*ptr = 10; //不为空则操作内存
}
指针的简单介绍到此结束。
网友评论