关于数据结构中的疑问?for(i=0,c=chars;c;++i;++c):Status StrAssign(HString &T,char * chars){\x05if(T.ch) free(T.ch);\x05for(i=0,c=chars;c;++i,++c); //求chars的长度i\x05if(!i){T.ch=NULL;T.length;}\x05else\x05{\x05\x05if(!T.ch=(char*)malloc

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 10:25:51

关于数据结构中的疑问?for(i=0,c=chars;c;++i;++c):Status StrAssign(HString &T,char * chars){\x05if(T.ch) free(T.ch);\x05for(i=0,c=chars;c;++i,++c); //求chars的长度i\x05if(!i){T.ch=NULL;T.length;}\x05else\x05{\x05\x05if(!T.ch=(char*)malloc
关于数据结构中的疑问?for(i=0,c=chars;c;++i;++c):
Status StrAssign(HString &T,char * chars)
{
\x05if(T.ch) free(T.ch);
\x05for(i=0,c=chars;c;++i,++c); //求chars的长度i\x05
if(!i){T.ch=NULL;T.length;}
\x05else
\x05{
\x05\x05if(!T.ch=(char*)malloc(i*sizeof(char))))
\x05\x05\x05exit(OVERFLOW);
\x05\x05T.ch[0..i-1]=chars[0..i-1];
\x05\x05T.length=i;
\x05}
\x05return OK;
}
i){T.ch=NULL;T.length;}中的(!i)以及后面的T.ch还有
for(i=0,c=chars;c;++i,++c); 中的i=0,c=chars;c:

关于数据结构中的疑问?for(i=0,c=chars;c;++i;++c):Status StrAssign(HString &T,char * chars){\x05if(T.ch) free(T.ch);\x05for(i=0,c=chars;c;++i,++c); //求chars的长度i\x05if(!i){T.ch=NULL;T.length;}\x05else\x05{\x05\x05if(!T.ch=(char*)malloc
StrAssign是个字符串的赋值操作.
首先要知道串的堆分配存储表示
typedef struct {
char *ch;
// 若是非空串,则按串实际长度分配存储区,否则 ch 为NULL
int length; // 串长度
} HString;
for(i=0,c=chars;c;++i,++c); //求chars的长度i
这个for循环是为了求出指针变量chars所指的字符串所包含字符的个数(即长度).i就是记录长度的计数器,所以初始值是0,即(i=0).变量c应该是个指向字符的指针变量,c=chars就是让c指向字符串chars的第一个字符,而c;这个表达式相当于c!=‘\0’,也就是c所指的字符不是空字符,也就是字符串没有结束.
if(!i){T.ch=NULL;T.length;}
!i 相当于i==0 ,也就是字符串chars的长度为0,此时就是将空串chars赋值给T,所以串T的存储空间基址ch是空(NULL).