神秘的指针

指针基本概述

         在C语言中,系统会根据类型为变量分配对应长度的空间,编译器可以通过变量名来访问这个变量。当要读取某个变量时,在编译时编译器根据变量名所在的地址和数据类型读取数据。

      指针就是地址的意思,一般的变量存的是数据,而指针变量存的是指针,即指针变量是存放地址的变量。指针变量的类型就是存放地址指向的数据类型。指针占四个字节的大小,用于存放地址。

        当编译器要调用指针存储的数据时,由于指针变量存放的是地址,所以会直接得到这个地址里的数据。

        如果需要获取某个变量的地址,可以使用取地址运算符(&):

char *pa = &a;
int *pb = &b;
pa = &c;

        这三行代码分别定义了字符型指针pa,整型指针pb,并将变量c的地址赋给了pa。

        如果需要访问指针变量指向的数据,可以使用取值运算符(*):

print("%c,%d\n",*pa,*pb);
print("%c,%d\n",pa,pb);

        如果输出上面两行代码,第一行会输出一个字符和一个整型数据,第二行则会输出两个地址。

接下来是本篇的重点——const!!!

指向const变量的指针

        首先,我们要明确,const修饰的变量无法被修改。

const int i = 100;

        这里的100是无法被修改的,如果为i再次赋值,程序就会报错。因此,我们常用这个关键字来保护我们不希望被改变的变量。
如果我们对i进行取址:

int *pi = &i;

        编译器也会报错,大概意思就是将“ const int* ”转化成 “ int* ”是无效的。要定义一个指向const变量的指针,我们只需要在指针前面加上const:

const int *pi = &i;

        实际上,只要const在取值运算符(*)左边,指针都可以正常使用:

int const *pi = &i;

const修饰的指针

        const修饰的变量只能由指向const变量的指针去指向,此外这个指针也可以指向别的普通变量。被const修饰的指针,它指向的地址是不能被改变的,但是该地址的值可以被改变。

i = 10;
int *const pi = &i;
i = 20;

        在上述代码中,i的值可以不是固定的,但是其地址不允许变动。

恶心的东西

        看完上面的东西,大家不妨思考一下下面这句话是什么意思:

int const *const pa = &i;

        如果没有上面的铺垫,相信大家都会觉得这个东西很恶心。但是看完整篇文章之后,大家就会知道: 

        这是被const修饰的指向const变量的指针。这个变量的值和指针指向的地址都不允许改变。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值