记得大学的时候,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语言知识的小补充,望广大读者多多指教。。。