在了解指针之前应该先了解地址,可以参考这篇文章hjr教程-汇编(一):地址与数据
内存一般分为程序空间和数据空间,程序空间放写的程序,数据空间放程序执行过程的用到的数据
指针分为指针变量名和指针变量值
指针变量名就是随便用英文字母命个名
指针变量值,存放在程序空间,是一个16进制数,这个数是一个地址,现在你知道为什么指针是16进制数了吧,因为地址就是用16进制表示的
如果用一本书做比喻,指针变量名就是目录里面的某章某节
指针变量值就目录里的--------xx页,指向某一页,那个某一页就是具体的地址,相当于你翻到那一页后右下角的页数,这两个值相等
某一页的内容就是数据
下面说下指针的好处
使用指针可以直接通过地址访问数据,
相当于,第三章第五节是指针变量名,37页是指针变量值,这个值等于地址值,37页的内容就是地址里的数据
比如第三章第五节内容是1,
现在你可以说告诉我第三章第五节的内容,然后你就知道了1
如果直接写第三章第五节=5,那么37页的内容就变成5了,这样你就操作了37页这个地址的数据,很方便吧
你也可以用取地址符号操作一个变量再赋值给指针变量,类似于说告诉我第三章第五节的页数,好了,你得到地址了。
定义指针:int *p; 之后直接用p就可以了,这里的p相当于前文的指针变量名
&这个符号是取地址,对象是一个变量, 比如int a =10,&a就是取到了a的地址
p = &a; 把a的地址赋给p,这里的&a即是指针变量值又是a的地址,两个值相等,对应前文 的目录里的---------xx页,这种页数,与书里面右下角的页数,两个值相等
下面如果我们操作p就是操作目录指向其他的页数,操作*p就是操作目录现在指向的那一页的内容,
即p = 地址,是改变指针变量的值
*p=值,是改变a变量的值