在牛客网上刷到了一道选择题:
两个指针变量不可以(A) 提供了四个选项:A.相加 B.比较 C.相减 D.指向同一地址。牛客网给出的答案A。
分析以及知识点回顾
指针变量保存的是地址,而地址本质上是一个整数,所以指针变量可以进行部分运算,例如加法、减法、比较等。
#include<stdio.h>
int main(){
int a=0;
double b=99.9;
char c='@';
//两个指针指向同一个变量
int *pa=&a;
int *paa=&a;
double *pb=&b;
char *pc=&c;
printf("pa=%#X,paa=%#X\n",pa,paa);//两者的值相同
printf("&a=%#X,&b=%#X,&c=%#X\n",&a,&b,&c);
//加法运算
pa++;
pb++;
pc++;
printf("pa=%#X,pb=%#X,pc=%#X\n",pa,pb,pc);
//减法运算
pa-=2;
pb-=2;
pc-=2;
printf("pa=%#X,pb=%#X,pc=%#X\n",pa,pb,pc);
//比较运算
if(pa!=paa){
printf("%d\n",*paa);
}
else{
printf("%d\n",*pa);
}
//指向同一个数组的两个指针
int array[10]={1,2,3,4,5,6,7,8,9,10};
int *p1=array;
int *p2=&array[0];
p1+=3;
p2+=6;
printf("%d\n",p2-p1);//输出3
//printf("%d\n",p2+p1);编译器是不允许这种操作的。
return 0;
}