初探C语言中的指针

IT小菜鸟,年后考研复试要考C,所以寒假就重温了一下C语言,看到指针这个曾经让我10分恶心的东东,决定记录下点东西,一来当成笔记,二来可以帮助一些刚刚入门的小伙伴们深刻理解一下指针这玩意。如果有哪里说得不对,欢迎大家批评指正。


首先,我们要区分两个概念。

1 指针

2指针变量

反正我个人学习的时候,这两个概念就经常弄混,所以,我觉得要想理解指针,就必须严格根清这两个概念。从定义上来看,这两个东东完全是两个不同的东西

首先来看指针,指针是个非常抽象的概念。众所周知,计算机系统的存储地址是一个遵循一定规则(这个规则我不会,暂时先这么说,大家原谅一下我的无知)的二进制数,例如2000,11111,这样的二进制数,如果实在感觉我说的陌生,大家可以去找一本《计算机组成原理》看一下,里面有详细介绍。那么话说回来,指针到底是什么?简而言之,指针就是(存储)地址,计算机内部任何一个地址都可以叫做指针,换句话说,指针是C语言对存储地址的另一种说法(专业的),在具体点,指针是一个二进制数,代表一个计算机内部存储地址。

指针变量一定是指针,但是指针不一定是指针变量


接下来,让我们看一下指针变量。我最想强调的就是最后两个字,变量!!什么意思?意思是指针变量和指针是不一样的啊,指针变量是一个变量啊!变量包括什么?

包括:1变量名   2变量值  3变量类型 4变量值

接下来,我们要了解两个操作符

*:取操作符,操作对象是地址,也就是指针,通过地址查到所对应的值

&:取地址操作符,操作对象是变量,通过变量名取得变量的地址

大家一定要记清楚这两个操作符的作用!!特别是 * ,千万不要和后面指针变量定义中的 * 混为一谈!为了加深大家的理解,我们通过几个简单的C语言语句给大家解释一下。

首先写一个C语言语句:

int i=1;

在这个语句中,我们进行了一个变量的声明和赋值。具体分析如下:

变量名:i         变量类型:int(整形)     变量值:1    变量地址:(假设是这个地址)20000

好,那么我们就对  i   这个变量了解的很充分了,接下来分析另外一句话。

int i=1;(假设i的地址是20000)

int *p=&i;    //指针变量定义

抛去int i =1;不看,我们看 int *p = &i;  分析:

变量名:p   变量类型:int型指针    变量值:20000 变量地址:(假设)22000

这样看来,就很简单明了,语句的作用就是定义一个int型指针的变量p,也就是我们俗称的(int型)指针变量,通过&操作符得到变量 i 的地址,将这个地址赋值给 p ,之后我们就可以通过指针变量 p(已获得i的地址)来访问 变量i了。

最后还要再说一句,int *p=&i;中的   *  不是取值操作符,这时候的 * 可以理解为一个关键字,和int共同构成变量类型int*,即整型指针。那什么时候是取值操作符呢?

例如  printf("%d\n",*p);       

通过前面我们知道,p的值是变量  i   的地址,那么*的作用就从p所代表的的地址中取出地址对应的值,所以被叫做取值操作符··

至于指针的好处之类的我就不赘述了,毕竟我觉得指针的难点就是这了。最后贴上完整代码和运行结果;

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i=200;//定义int型变量,值为200
    int *p;//定义int型指针变量p
    p=&i;//将变量i的地址赋给p
    printf("变量i的值:%d\n",*p);//通过取值操作符*得到i的值
    return 0;
}

运行结果:

变量i的值:200


猜你喜欢

转载自blog.csdn.net/an20150509/article/details/79131844