关于C指针
地址概念:内存基本单元是一个字节,一个字节8个位。在定义变量的时候,如int a=10;系统为变量a分配2个字节空间:1000~1001,并在1001~1002中存有数据10。内存中没有变量a,只有1000~1001这个地址,所以使用a的时候,拿出这个地址中的值就行了。
寻址方式:分两种
1、直接寻址:
如printf("%d",a);系统找到1000~1001这个地址,取出其中存的值。
2、间接寻址(指针):
在一个新的地址2010~2011中存放a的起始地址1000,使用a的时候,在2010中取出a的地址1000,再从1000中取出a的值。
指针类型:
1、变量指针:
就是一个变量的地址,a的指针就是1000。值是地址。
2、指针变量:
全名是指向变量的指针变量。一个变量专门用来存放另一个变量的地址(即指针),则这个变量称为指针变量。如定义一个变量ap=2010,则ap就是一个指针变量。
值是指针。(我们需要理解的是指针变量)
*运算和&运算:
在定义指针变量的时候需要用到*符号:
int a;int *ap;
a=10;ap=&a;//&是取地址运算,将a的地址1000取出,赋值给指针变量
a=*ap;//*是指针运算符(我理解是取值运算符),先取出a变量存的值1000,再取出地址为1000的值,将这个值赋值给变量a。
总结:*ap==a;
&*ap==&a;
*&a==a;
(*ap)++==a++;
指向数组的指针变量:
数组的指针就是数组的起始地址;用一个变量来存放一个数组的起始地址,这个变量就是指向数组的指针变量。
int a[10];int *app;//定义
app=&a[0];app=a;//赋值,通常用后面一种
总结:app=a;
app+i==a+i//就是a[i]的地址
*(app+i)==*(a+i)//对应的值
数组指针变量可以带下标,app[i]==*(app+i)
最新文章
- beat your own python env
- linux中终端控制键Ctrl+C,Ctrl+Z,Ctrl+D的使用场合
- 网上收集的以及自己总结的iOS开发技巧
- redis的备份
- 【转载】存储scale-up和scalce-out架构
- Raspberry Pi3 ~ 安装samba服务
- 解决安装包在win7,win8系统下安装后运行没有管理员权限
- Object instanceof Function和Function instanceof Object
- Python日期操作
- db2备份还原
- java----DOS命令
- java 面向对象内部类
- KindEditor echarts
- Error:Makefile:452: target 'config' given more than once in the same rule
- ES6之数组操作
- [算法]用java实现0-1背包和部分背包问题
- php快速上手总结
- Android笔记一.深入理解Intent和IntentFilters(一)
- SqlServer 如何知道是否发生了索引碎片
- LightOJ 1070 - Algebraic Problem 推导+矩阵快速幂