服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言入门之指针用法教程

C语言入门之指针用法教程

2021-01-30 14:36C语言教程网 C/C++

这篇文章主要介绍了C语言入门之指针用法教程,主要对C语言中指针的本质及常见用法做了较为通俗易懂的分析,是后续深入学习C语言的基础,需要的朋友可以参考下

本文针对C语言初学者详细讲述了指针的用法,并配以实例进行说明。具体分析如下:

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

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

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

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

?
1
2
3
4
5
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类型的变量。

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

?
1
2
3
4
5
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,那么下面两句是等效的:

?
1
2
scanf("%d", &a);
scanf("%d", pt);

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

?
1
2
3
int a;
int *pt = &a;
*pt = 123; // 该语句等同于 a = 123;

不要把“*”给忘了哈。

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

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

?
1
2
3
4
int a, b, c;
int *pt_a = &a, *pt_b = &b;
pt_b = &c;
pt_a = pt_b;

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

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

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

延伸 · 阅读

精彩推荐
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29