指针的运算
来源:互联网 发布:新塘哪里有网络牛仔 编辑:程序博客网 时间:2024/05/20 20:04
其实,在C语言中,指针功能的强大,主要体现在指针变量的间接运算上,指针涉及的运算并不多。
1、基本运算
指针变量的基本运算包括赋值、取地址以及取值(间接运算)等运算。
举例,如清单1:
例子输出结果:
第6行的意思是把整型变量a的地址赋给指针变量p(这时可以说p指向了a),然后使用间接运算符(*),像第8和第9行那样,通过p来间接地使用a。
第5行的语句再平常不过了,其实是有深意的,在大多数编程语言中用同一符号(如变量名a)来表示它的地址和地址中的内容(即值),编译器根据上下文环境来判断它的具体含义。如例子中的第8行的意思是把变量a的值(即整数5)赋给b(在这种情况下a被叫做右值),而第9行的意思是往a的地址(即0xbfee8388)中存储一个整数9(在这种情况下a被叫作左值),所以变量既可作为左值,也可作为右值。
指针变量作为一种变量,当然既可以给它赋值(如例子中把变量a的地址赋给指针变量p),也可以通过取址运算符(&)来取它的地址(如第11行打印出指针变量p的地址值0xbfee8384)。
取值运算的复杂用法,如清单2:
例子输出结果:
在例子中的第14行,通过函数调用把指针变量str的地址赋给二级指针变量p,然后在第7行通过*p来间接地使用str,这时str中的值为所分配的20个字节内存的首地址,接着往这段内存中拷贝字符串,最后打印字符串并释放这段内存。
2、加减和求差
指针变量加1的意义与整型变量加1的意义不同。
举例,如清单3:
例子输出结果:
首先使用指针变量start和end分别指向数组a的第一个元素和最后一个元素,然后从start+2(即0xbfeabac0,通过式子0xbfeabab8+2*sizeof(int)算出)的地址中取得整数16,和--end(即0xbfeabad0,通过式子0xbfeabad4-1*sizeof(int)算出)的地址中取得整数12,从中可知,指针变量加1是加一个数据类型(就是声明指针变量时所使用的数据类型)的大小。
指针变量求差的意义不大,可以得到数组两个元素之间的距离,如例子中元素7和元素3相隔3个元素。
3、比较
指针变量的比较就是比较指针变量值的大小以及是否相等,与其他数据类型的比较类似。
如清单4:
例子输出结果:
例子中,若malloc的返回值不为NULL即表示内存分配成功。
- 指针变量的运算
- 指针的算术运算
- 指针的运算
- 指针的加减运算
- 指针的算术运算
- 指针的运算
- 指针的运算总结
- 指针的运算
- 指针的运算
- 指针的重要运算
- 指针变量的运算
- 指针变量的运算
- 指针的基本运算
- 指针的算术运算
- 指针的算术运算
- 指针的算术运算
- 指针的算术运算
- 指针的运算
- 拷贝构造函数和赋值构造函数声明为私有的作用
- .toString()和.String()的区别
- 如何查看 Apache 模块是否正常
- Tomcat 目录详解
- runtime comparison
- 指针的运算
- Week 9:Anomaly Detection课后习题解答
- C++ HDOJ 1029
- O(n^2)排序算法,发现一个风格检测的OJ----LintCode
- UML常用图的几种关系的总结
- mac下hive安装
- 为什么要学习指针(转载自知乎)
- C++拷贝构造函数详解
- [心得] RPC学习