指针的运算
1.指针加整数
指针可以加一个整数,往下指几个它指向的变量,结果还是个地址。
前提:指针指向数组元素的时候,加一个整数才有意义。
#include<stdio.h>
int main()
{
char buf[5];
char* q;
q = buf;
printf("q=%p\n", q);
printf("q+2=%p\n", q + 2);
return 0;
}
2.指针比较大小
前提:只有两个相同类型的指针指向同一个数组元素的时候,比较大小才有意义。
指向前面元素的指针 小于 指向后面元 素的指针
#include<stdio.h>
int main()
{
int a[10];
int* p, * q;
p = &a[1];
q = &a[6];
if (p < q)
{
printf("p<q\n");
}
else if (p > q)
{
printf("p>q\n");
}
else
{
printf("p=q\n");
}
return 0;
}
3.指针减法
前提:必须是两个相同类型的指针指向同一个数组元素的时候,做减法才有意义。
结果是 两个指针中间有多少个元素。
#include<stdio.h>
int main()
{
int a[5];
int* p, * q;
p = &a[0];
q = &a[3];
printf("p-q=%p\n", p - q);
return 0;
}
4.指针相互赋值
注意:只有相同类型的指针才可以相互赋值(void * 类型除外)
注意:如果类型不相同的指针想要相互赋值,必须进行强制类型转换。
#include<stdio.h>
int main()
{
int* p;
int* q;
int a = 1;
p = a;
q = p;
printf("q=%d\n", q);
return 0;
}