指针运算
从内存存储的角度看,指针运算的本质为指针中存储的地址的运算。
切记一点就是:指针的运算包括数值和类型。
一、赋值运算
-
在进行指针的赋值运算时,要注意的是不同类型指针虽然可以赋值 ,但是编译器会警告 ,为此我们应该用强转的方式明确类型,从而避免隐式转化带来的错误。
#include <stdio.h>
int main(void)
{
int a = 0x1234;
float pp = (float)&a; //用强转的方式说明了是float类型的
printf("%f",a);
return 0;
}
二、算术运算
- 简单的说,算术运算就是一种数值加类型的运算。
- p++和(p)++之间的差别:p++是地址变化,(p)++是指针变量所指的数据变化。一个指针变量加一个整数不是简单的数字相加,而是连续移动若干地址。当两个指针指向同一数组时,它们可以比较大小进行减法运算。
#include <stdio.h>
int main(void)
{
char *p = (char*)0x1234;
printf("p = %x\n",p);
printf("p+1 = %x\n",p+1); //p+1进行了算术运算
return 0;
}
/*
2016年5月28日23:00:00(时间)
输出得结果为:
p = 1234
p+1 = 1235
*/
三、比较运算
指针的比较运算就要说的就是指针指向的地址是否相同的。
因为比较简单理解就不举例子了,其中要注意的是:
指针的运算只能发生在同类型或整型之间,不同的类型平台会警告或者停止运行的。