指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的,以单元为单位。
例一:
#include<stdio.h> int main() { char a[]="0123456789"; int *ptr = (int *)a; char *cp = a; printf("%d\t%d\n",sizeof(int),sizeof(char)); while(*ptr!='\0') { printf("%c\n",*ptr); ptr++; } //while(*cp!='\0') //{ // printf("%c\n",*cp); // cp++; //} return 0; }
运行结果:
指针 ptr 被加了 1,编译器是这样处理的:它把指针 ptr 的值加上了 sizeof(int),在 32 位程序中,是被加上了 4,因为在 32 位程序中,int 占 4 个字节。由于地址是用字节做单位的,故 ptr 所指向的地址由原来的变量 a 的地址向高地址方向增加了 4 个字节。由于 char 类型的长度是一个字节,所以,原来 ptr 是指向数组 a 的第 0 号单元开始的四个字节,此时指向了数组 a 中从第 4 号单元开始的四个字节。
例二:
#include<stdio.h> int main() { char a[]="0123456789"; int *ptr = (int *)a; char *cp = a; printf("%d\t%d\n",sizeof(int),sizeof(char)); //while(*ptr!='\0') //{ // printf("%c\n",*ptr); // ptr++; //} while(*cp!='\0') { printf("%c\n",*cp); cp++; } return 0; }
运行结果: