C语言入门第十三篇,指针

指针是以一种灵活的方式来表示变量或者说数据。他只是一个很基础的东西,我们初学它的时候都会觉得很难很抽象,然而后面的大多数地方都会用到指针,然后会有一种看见指针望而却步的感觉,这是我自己的切身感受,但是其实指针并不是C语言的难点,需要的只是多写些代码就会了。

地址
前面说内存的时候也给大家有意无意的提到了这点,我们的变量全部都是在内存中,而内存是一个有很多房间的酒店,每个房间有不同的房间号,这个房间号就是地址。内存被一块一块的分成了很多,当我们的变量存储在内存中时,就有一个地址“编号”。(这个比喻其实并不是很恰当,但是我们可以先这样理解)并且这个编号是独一无二的。

所以我们的每个变量都会有一个地址,而我们今天说的指针就是利用地址来访问变量的一种变量(指针变量)。

指针的形式简单,就是在我们前面讲的变量声明的时候加上*(星号)。

int *a;//指向整型变量a的指针
float *b;//指向单精度浮点数变量b的指针
char *c;//指向字符变量c的指针

我们怎么初始化一个指针呢?

int *a;
int b=5;
a=&b;

我们前面讲了&取地址这个符号,目的是取b这个变量的地址赋值给a。然后*a便是指向5这个变量。所以这里要明白a是地址,*a是指针变量(是一个具体的变量值)。
指针变量

上图表现了上述的关系。

其实指针的基本语法也就这样。大家肯定还是觉得简单,但是看看下面这个呢?

int a;
*&a=25;

上面这段代码的意思是什么呢?如果你能明白的话,你就已经明白指针了。他是将25赋值给a,但是在真正的编程的时候谁都不会这样做,这里只是让你更加明白指针。

注意事项:
指针变量初始化时,只能通过赋值地址,不能将值赋值给它。

int *a=12;

上面这种做法是错误的。因为指针变量a并不知道12这个地址是什么,能不能访问(但是c语言语法是允许这样做的,但是千万不要这样做)。

int a;
int *b=&a;

上面的代码就是对的。

指针的指针

首先我们必须要知道指针变量,它也是一个变量,所以也会有一个地址来存储它,也就是说指针变量也有地址。

那么指针的指针就是指向指针变量地址的指针

int **c;

声明方式如上。我们再来看看初始化:

    int *a;
    int b=5;
    int **c;
    a=&b;
    c=&a;

指针的指针
上图表现了指针的指针。

这里先介绍一些基本的东西,首先会用,然后我们再慢慢深入。后面在具体的编程环境里面再慢慢体会。

既然有指针的指针,那当然也有指针的指针的指针。定义也是类似的,只是我们很少去用了,也根本不太会用上。

指针的运算
指针变量是变量,只要是变量就可以进行加减,以及前面所说的所有操作符。
我们把指针变量,当做普通的变量来进行操作。

int *a;
……
a+=1;
a-=1;
a++;
a--;

指针运算

通过上图我们可以看看指针的运算,右边是假设的地址,通过加减运算指针可以任意访问上面的地址。
当然这个是有点抽象,后面我们讲数组和指针的关系的时候慢慢讨论这个。

总结
指针是通过地址访问变量的一种变量。地址的操作更加接近底层,后面我们也会体会到指针的灵活性,本篇主要讲述指针的一些基础东西。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值