C语言学习中的指针用法教程

2020-11-18 C语言

  对于C语言初学者来说,需要明白指针是啥?重点就在一个“指”上。指啥?指的地址。啥地址?内存的地址。

  上面说明就是指针的本质了。

  这里再详细解释下。数据存起来是要存在内存里面的,就是在内存里圈出一块地,在这块地里放想放的东西。变量关心的是这块地里放的东西,并不关心它在内存的哪里圈的地;而指针则关心这块地在内存的哪个地方,并不关心这块地多大,里面存了什么东西。

  指针怎么用呢?下面就是基本用法:

  int a, b, c;double f;int *pt_a = &a, *pt_b = &b, *pt_c = &c;double *pt_f = &f;

  上面两行声明了三个int类型的变量a,b,c,一个double类型的变量f。下面就是指针的用法了,声明变量的.时候只需要在变量前面加上“*”这个符号就说明了这个变量是指针,而前面的“int”说明指针指向的内存里面存放着int类型的变量。

  变量和指针的声明也可以放到一起:

  int a, b, c;double f;int other, *pt_a = &a, *pt_b = &b, *pt_c = &c;double x = 0, *pt_f = &f;

  然后就是新的运算符——“&”了。是不是很熟悉?没错,这个就是scanf里面的那个“&”。它是取地址符,即用在变量前面使用这个运算符,能够获得这个变量在内存里面的地址。由此就可以解释scanf双引号后面为何要使用“&”了,就是将前面按照格式读进来的数据,按照后面给出的地址直接填进内存里,所以scanf双引号后面提供的参数实质上并不是希望赋值的变量,而是希望保存数据的地址。所以,例如如果有int类型的变量a,同时有指向它的指针pt,那么下面两句是等效的:

  scanf("%d", &a);scanf("%d", pt);

  回到指针,接下来就是修改指针指向变量的值了,怎么弄呢?下面就是例子:

  int a;int *pt = &a;*pt = 123; // 该语句等同于 a = 123;

  不要把“*”给忘了哈。

  至于这个“*”符号,可以这么理解:需要用到指针指向的内容时,加上“*”,此时它等同于一个变量;只是需要指针的地址时,不需要加“*”,此时它代表内存的地址。

  而指针也可以改变它指向的地址:

  int a, b, c;int *pt_a = &a, *pt_b = &b;pt_b = &c;pt_a = pt_b;

  很多教材都在强调野指针的问题,什么叫野指针?呃……可以叫做“撒野”的指针。什么意思呢?举个例子,如果声明了一个指针pt,而没让他指向任何变量,那么它指向哪里呢?答案是:不确定,整个内存哪里都有可能被它指到。如果此时修改它指向的内容,而它恰好指向了系统某个关键的进程……那后果就比较严重了。所以指针用之前一定让它指点东西。如果想让它什么都不指,怎么办?很简单,指向NULL即可。

  这就是指针了。可能看完很多人会觉得本来用变量你又加了个指针指不是更麻烦?我要说的是,这只是最基本的用法。C语言的数组中,还有一些复杂的数据结构都需要用到指针。所以这些基础的东西还是有必要加以熟练掌握的。

  希望本文所述对大家C语言程序设计的学习有所帮助。

【C语言学习中的指针用法教程】相关文章:

C语言指针的用法10-05

C语言指针用法详解09-20

C++函数指针学习教程10-03

C语言指针教学09-25

C语言指针的传递10-06

在Swift中怎么使用C语言的指针10-06

C语言指针和数组的学习方法09-22

C语言的指针类型解析10-06

C语言中的指针解读10-04