专门做试题的网站,往建设厅网站上传东西,宁夏住房和城乡建设局网站,网站关键字多少个如果p是一个指向数组中某个元素的指针#xff0c;那么p将会对p进行自增运算并指向下一个元素#xff0c;而pi将对p进行加i的增量运算#xff0c;使其指向指针p当前所指向的元素之后的第i个元素。这类运算时指针或地址算术运算中最简单的形式。
allocbuf中的空间使用状况也是…如果p是一个指向数组中某个元素的指针那么p将会对p进行自增运算并指向下一个元素而pi将对p进行加i的增量运算使其指向指针p当前所指向的元素之后的第i个元素。这类运算时指针或地址算术运算中最简单的形式。
allocbuf中的空间使用状况也是我们需要了解的信息。我们使用指针allocp指向allocbuf中的下一个空闲单位。当调用alloc申请n个字符的空间时alloc检查allocbuf数组中有没有足够剩余空间。如果有足够的空闲空间则alloc返回allocp的当前值即空闲块的开始位置然后将allocp加n以使它指向下一个空闲区域。如果空闲空间不够则alloc返回0。如果p在allocbuf的边界之内则afree(p)仅仅只是将allocp的值设置为p
#define ALLOCSIZE 10000 /* 可用空间大小 */static char allocbuf[ALLOCSIZE]; /* alloc使用的存储区 */
static char *allocp allocbuf; /* 下一个空闲位置 */char *alloc(int n) /* 返回指向n个字符的指针 */
{if (allocbuf ALLOCSIZE - allocp n) { /* 有足够的空闲空间 */ allocp n;return allocp - n; /* 分配前的指针p */ } else /* 空闲空间不够 */return 0;
}
void afree(char *p) /* 释放p指向的存储区 */
{if (p allocbuf p allocbuf ALLOCSIZE) allocp p;
} 一般情况下同其他类型的变量一样指针也可以初始化。通常对指针有意义的初始化值只能是0或者是表达地址的表达式对后者来说表达式所代表的地址必须是在此前已定义的具有适当类型的数据的地址。例如
static char *allocp allocbuf;
将allocp定义为字符类型指针并将它初始化为allocbuf的起始地址该起始地址 是程序执行时的下一个空闲位置。上述语句也可以写成下列形式
static char *allocp allocbuf[0];
这是因为该数组明实际上就是数组第0个元素的地址。
指针的减法运算也是有意义的如果p和q指向相同数组中的元素且pq,那么q-p1就是位于p和q指向的元素之间的元素的数目。我们由此可以编写出函数strlen的另一个版本如下图所示
/* strlen函数返回字符串s的长度 */
int strlen(char *s)
{char *p s;while (*p ! \0)p;return p - s;
}
在上述程序的的声明中指针p被初始化为指向s即指向该字符串的第一个字符。while循环语句将依次检查字符串中的每个字符直到遇到标识字符数组结尾的字符’|0‘为止。