学习c语言-----指针

本文介绍了C语言指针的基本概念,包括指针变量、指针、取地址运算符和指针运算符。通过实例演示了如何使用指针来获取和改变变量的值,并探讨了在函数中使用指针改变局部变量的方法,帮助初学者理解指针的用途和重要性。
摘要由CSDN通过智能技术生成

人无完人,如果我写的文章有什么疏忽、错误或者缺漏,非常欢迎各位在评论区里斧正,在此感谢您观看本篇文章!

在开始c语言指针学习以前,我们需要了解几个概念。

1-----“指针变量”指的是存储地址值的变量,一般可以简称为指针。实质就是一个变量,可以存储不同的地址值(也就是指针)。

2-----“指针”指的是地址值。

3-----“取地址运算符”--’&‘,这个符号的作用,就是得到某个量的地址。你可以理解成,在一间大公寓里,每一个房间都是一个“地址”,在里面住的人,就是这个“地址”对应的量,而你是这间公寓的主人,你可以通过这个“地址”,来改变在里面居住的人。

4-----“指针运算符”--’*‘,这与取地址运算符恰好相反,就像数学中的乘与除、积分与求导一样,同样可以用公寓的例子来理解,‘&’就是你可以通过“地址”来改变或找到里面的人,而’*‘就是你同样可以通过里面的人来找到地址。

        以上几个概念要重点掌握,其它细琐的库函数什么的就不在这里讲解了。(当然了,如果你需要的话可以在评论区留下你的疑问,只要我有时间和能力,都会尽量完成的)

        由于指针就单单概念来说非常难以理解,所以我将结合以下3个示例进行讲解。如下:

        1---

int main(void){
    int *p;
    //定义一个指向整型的指针(变量)p
    int a = 10;
    //定义一个整型变量
    p = &a;
    //将 a 的地址值赋予 p;
    //以下是打印输出
    printf("%d", p);
    printf("%d", &a);
    //以上的输出结果是一样的,都是a的地址值
    printf("%d", *p);
    printf("%d", a);
    //以上的输出结果也是一样的,都是a存储的值---10
}

        上面的例子,是指针最基本、最实在的应用之一。你可以将其理解成之前“喊你回家吃饭”例子的进阶版,小明妈妈想喊小明吃饭,除了直接叫小明的名字(a)外,还可以通过他的好朋友(p)来间接地喊小明。当然了,妈妈肯定不能直接说:“吃饭咯!”这样有可能会让(p)误以为是在叫他吃饭,妈妈得给(p)一个指令-----*(记录成*p),这样就明确而且能达到效果了。

        2---

int main(void){
    int *p;
    int a = 5;
    p = &a;
    //上述代码同理
    printf("%d", a);
    //打印a存储的值,此时是5
    *p = 10;
    //通过p来改变a存储的值
    printf("%d", a);
    //打印,此时是10;
}

        上述示例,是通过指针改变原来的值。同样可以通过上述例子来理解。把小明的状态(现在做的事)看成一个常量,那么妈妈可以通过小明的朋友p来观察小明的状态(即知道小明在做什么),这是上述例子想要表达的意思。当妈妈看到小明一直在玩电脑游戏,心中不满,想要让小明去读书时,妈妈既可以直接叫小明去读书,也可以通过小明的好朋友p来让小明去读书,自然地,为了让p更清晰他要作什么,你还是要给他加上一个指派符号---*(写作*p)。

        看到这里你应该已经明白了,指针一般就是用来 获取 或者 改变 指针所指向的内容。因为它可以间接改变、间接引用其它值,程序就有了极大的扩展性。

        我们接着讨论。

        当然了,有的时候妈妈并不知道小明在哪里,或者说在妈妈的视野里,是没有小明、只有好朋友p的。这时候,妈妈就不能直接找小明,只能通过p了。这就涉及到了指针的核心内容之一----在一个函数里引用指针,来改变其它函数里定义的局部变量的值。

        我们都知道,一个局部变量只能在它的作用域里作用,如果超出了它的作用域,那么你就无法直接调用它。例如,在主函数main里定义的整型变量i,在某个你定义的函数 fx 中无法发挥作用,如以下代码,就是完全错误的:

void ali(){
    printf("%d", i);
}
//定义了一个函数ali
//要实现的功能是,将i打印出来

int main(void){
    int i = 10;
    ali();
    //定义一个整型变量
    //并赋值为10;
}

//运行结果:给ali报错
//称不存在i

当然了,你如果说定义参数并传i过去,这时候就可以打印i,但是在不引用指针的情况下,就不能在ali函数中改变i的值。所以,我们将要使用指针来进行调用。

话不多说,看如下代码: 

void ali(int* p){
    printf("%d\n",*p);
    //通过指针了解i的值
    *p = 100;
    //通过指针改变i的值
}

int main(void){
    int i = 10;
    ali(&i);
    //调用ali函数,将i的地址传过去是因为
    //p是一个整型指针,存储的是地址

    printf("%d", i);
    //在运算结束后,打印i的值
}

//运行结果:
//10
//100

        指针的基础内容大致就是这些,这里就不再赘述,如果有什么疑问或者建议,欢迎在评论区留言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值