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

本文针对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语言中指针的用法、c语言指针用法、c语言指针的用法、c语言 指针 用法举例、c语言指针入门,以便于您获取更多的相关知识。

时间: 2024-09-20 22:05:20

C语言入门之指针用法教程_C 语言的相关文章

简明的C++函数指针学习教程_C 语言

定义每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针. 语法数据类型 (*指针变量名)(参数表): int (*myFunc)(double b, int c); 说明 函数指针的定义形式中的数据类型是指函数的返回值的类型. 区分下面两个语句: int (*p)(int a, int b);//p是一个指向函数的指针变量,所指函数的返回值类型为整型 int *p(int a, int b);//p是函数名,此函数的返回值类型为整型指针 指向函数的指针变量不是固

在Visual Studio中用C++语言创建DLL动态链接库图文教程_C 语言

什么是DLL(动态链接库)? DLL是一个包含可由多个程序同时使用的代码和数据的库.例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数.因此,每个程序都可以使用该DLL中包含的功能来实现"打开"对话框.这有助于促进代码重用和内存的有效使用.这篇文章的目的就是让你一次性就能了解和掌握DLL. 为什么要使用DLL(动态链接库)? 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可以将它构造成相对独立的功能模块并在之后的项目中重复

C语言循环结构与时间函数用法实例教程_C 语言

本文实例展示了C语言循环结构与时间函数用法,对于C语言的学习来说是非常不错的参考借鉴材料.分享给大家供大家参考之用.具体如下: 完整实例代码如下: /********************************************** ** <Beginning C 4th Edition> Notes codes ** Created by Goopand ** Compiler: gcc 4.7.0 *****************************************

C语言中的结构体的入门学习教程_C 语言

C语言中数组允许定义类型的变量,可容纳相同类型的多个数据项,但结构体在C语言编程中,它允许定义不同种类的数据项可供其他用户定义的数据类型. 结构是用来代表一个记录,假设要跟踪图书馆的书籍.可能要跟踪有关每本书以下属性: Title - 标题 Author - 作者 Subject - 科目 Book ID - 编号 定义结构体定义一个结构体,必须使用结构体的struct语句.该struct语句定义了一个新的数据类型,程序不止一个成员.struct语句的格式是这样的: struct [struct

C语言编程中的联合体union入门学习教程_C 语言

联合体(union)在C语言中是一个特殊的数据类型,能够存储不同类型的数据在同一个内存位置.可以定义一个联合体使用许多成员,但只有一个部件可以包含在任何时候给定的值.联合体会提供使用相同的存储器位置供多用途的有效方式. 定义联合体要定义联合体,必须使用union语句很相似于定义结构.联合体声明中定义了一个新的数据类型,程序不止一个成员.联合体声明的格式如下: union [union tag] { member definition; member definition; ... member

C++类中的static和const用法实例教程_C 语言

static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法.供大家参考借鉴.具体说明如下: 首先以代码用来举例说明.示例代码如下: class A { public: A():m(10) //const成员必须在构造函数的初始化构造列表中初始化 { q = 40; } void fun1()const { m++; //错误.const成员是常量,不能改变其值. n++; //正确.static变量n属于类,但是每个对象的函数都可以访

C语言编程中生成随机数的入门教程_C 语言

语言产生随机数是一个常见的编程功能任务,当然这个也不难,调用两三个函数就出来了,但是你知道这些函数具体是起到怎样的作用,并且是它们是如何产生随机数的吗? 几个概念 随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的. 随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的值就一样.所以要产生随机数,则srand(seed)的随机数种子必须也要随机的. 用srand()产生随机数种子

C语言中函数的声明、定义及使用的入门教程_C 语言

对函数的"定义"和"声明"不是一回事.函数的定义是指对函数功能的确立,包括指定函数名,函数值类型.形参及其类型以及函数体等,它是一个完整的.独立的函数单位.而函数的声明的作用则是把函数的名字,函数类型以及形参的类型.个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体.--谭浩强 ,<C程序设计>(第四版),清华大学出版社,2010年6月,p182 这段论述包含了许多概念性错误,这

C++中const用法小结_C 语言

const在C++中使用十分广泛,不同位置使用的意义也不尽相同,所以想写篇文章对其做一个总结. 首先,明确const是"不变"这个基本意义,但是不变不意味着什么都不变,下面将会看到. 1. const与变量 基本原则:const变量(对象)不能被修改 const在变量中的引入和魔数有关,所谓"魔数"指的是突然出现的一个常量值(也叫字面值常量). for(int i = 0; i < 512; i++) { // todo } 上例中,512即为魔数,512突然