再论C语言指针—对指针的理解

记得大学的时候,C语言老师就说过,C语言当中最难的理解的就是指针了。的确,曾经有人说过,再牛逼的软件工程师都不敢保证自己能用好指针。今天,作为菜鸟级别的程序猿的我献丑了,只是讲讲自己平时学习当中对指针的理解。仅供参考,由于作者资历尚浅,不足之处还望大家多多指教。OK,今天不谈人生,也不谈妹子,就谈指针。

谭浩强的那本C语言教材中这样定义指针:指针是用于存放变量地址的。指针变量:是一种用于存放其他变量地址的变量。这样定义确实没错,但是以今天的IT行业的发展,中国的很多大学却依然使用谭浩强这本C语言教材感觉真心out了。好啦,作为小辈,我不吐槽谭浩强爷爷了。闭嘴安静

OK,进入正题,首先,先来看看我写的一个简单的小程序:


这是一个很简单的小程序,大家猜猜这几个打印值为多少?我想这种程序对于大神级别的人物来说那是分分钟搞定的事情。OK,我先来贴出答案,然后在继续下文:


这里想问几个问题:

1.为什么经过set_num_1(num)函数之后,全局变量num的值为什么没有变成num = a + b = 6呢?

2.为什么经过set_num_2(&num)函数之后,指针ptr的值变成6呢?程序当中并没有对ptr进行赋值预算等操作啊?

        对于问题1,是这样理解的,set_num_1(Int number)中的number是一个函数中的局部变量,局部变量是在栈中分配内存的,当函数结束之后也将释放分配的内存。所以,当全局变量num作为函数参数传入时,这个操作只是把num = 3,也就是3传给set_num_1()函数当中的局部变量number,经过number = a +b运算之后number的值变成了6,但是并没有影响全局变量num的值。

        对于问题2,就是涉及到指针的理解了,为什么经过set_num_2之后,ptr的值变为6呢?首先我们可以看到,int *ptr = &num,这句话是将num的内存地址赋给了指针ptr,而set_num_2(&num)的操作就是通过指针找到num变量所在的那块内存地址对应的空间上进行操作,而ptr是指向num变量所对应的内存地址的,所以对num的内存空间操作,通过ptr指针就可以打印出操作修改的结果了。

        本文只是C语言知识的小补充,望广大读者多多指教。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值