嗯,没错,对指针的加减运算是以步长为单位的,不过这是对编译器来讲的。但是对于机器来讲,指针也是二进制数据,在机器内对它们进行运算和一般的数据是一样的,只是因为编译器知道它们是指针,所以编译器告诉你的是指针之间的步长。以下是一个测试的程序,应该能说明问题吧,仅供参考:
成都创新互联公司是一家专注于成都网站建设、网站建设与策划设计,正阳网站建设哪家好?成都创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:正阳等地区。正阳做网站价格咨询:18982081108
#includestdio.h
#includestdlib.h
void
main()
{
float
a[10],*p,*q;
p=a[4];
q=a[7];
printf("p:
0x%0xd\n",
p);
printf("q:
0x%0xd\n",
q);
printf("p-q:
%d\n",
p-q);
printf("p+3-p:
%d\n",
p+3-p);
system("pause");
}
可以啊指针其实也是一个内存单元,存放了一个地址,变量也是一个内存单元,存放了一个变量。减了就是吧指针这个内存单云存放的地址减了。
可以使用。
对于TYPE *类型的p,可以使用p++或p--来实现p移动位置,指向下一个或上一个元素的效果。
在C语言中,指针的本质为地址,所以当TYPE*类型的指针在进行++或--运算时,其指向的地址值,会实际增加或减少TYPE所占内存的大小。也就是说,从数值上,当p++时,值会增加sizeof(TYPE), 当p--时,值会减少sizeof(TYPE)。
/*Please input the expression a+(-*/)b:
9/3
9 / 3 = 3
Press any key to continue
*/
#include stdio.h
int add(int x,int y) {
printf("%d + %d = ",x,y);
return x + y;
}
int sub(int x,int y) {
printf("%d - %d = ",x,y);
return x - y;
}
int mult(int x,int y) {
printf("%d * %d = ",x,y);
return x * y;
}
int dev(int x,int y) {
printf("%d / %d = ",x,y);
return x / y;
}
void main() {
int (*funp)(int,int);
char op;
int x,y;
printf("Please input the expression a+(-*/)b:\n");
scanf("%d",x);
scanf("%c",op);
scanf("%d",y);
switch(op) {
case '+' : funp = add; break;
case '-' : funp = sub; break;
case '*' : funp = mult; break;
case '/' : funp = dev; break;
default : printf("Operator is illegal;\n");
}
printf("%d\n",funp(x,y));
getchar();
}