1、有效的指针运算包括:相同类型指针之间的赋值运算;指针同整数之间的加法或减法运算;指向相同数组中元素的两个指针间的减法或比较运算;将指针赋值为0或指针与0之间的比较运算。
例1:
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE];
static char *allocp = allocbuf;
char *alloc(int n)
{
if (allocbuf +ALLOCSIZE -allocp >= n) {
allocp += n;
return allocp -n;
}
else
return 0;
}
void afree(char *p)
{
if (p >=allocbuf && p < allocbuf + ALLOCSIZE)
allocp = p;
}
void swap(char *v[], int i, intj)
{
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
2、字符数组
字符数组以空字符'\0'结尾,所以,程序可以通过检查空字符找到字符数组的结尾。
以数组的形式表示:
void strcpy(char *s, char *t)
{
int i;
i = 0;
while ((s[i] =t[i]) != '\0')
i++;
}
以指针的形式表示:
void strcpy(char *s, char *t)
{
while ((*s++ =*t++) != '\0')
;
}
3、指针数组与指针的指针
char *ptr[MAXLINES]; //ptr是个具有MAXLINES个元素的一维数组,其中的每个元素都是指向字符类型的指针。
char **ptr; //指针的指针,指针所指向的元素师指针,该指针所指向的元素师char数据
当指针数组输出时,可以用printf("%s\n",*ptr++);