指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的,以单元为单位。
例一:
#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;
}
运行结果: