关于数据结构中的疑问?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/07/15 02:52:09
![关于数据结构中的疑问?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](/uploads/image/z/11975603-59-3.jpg?t=%E5%85%B3%E4%BA%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%AD%E7%9A%84%E7%96%91%E9%97%AE%3Ffor%28i%3D0%2Cc%3Dchars%3Bc%3B%2B%2Bi%3B%2B%2Bc%29%3AStatus+StrAssign%28HString+%26T%2Cchar+%2A+chars%29%7B%5Cx05if%28T.ch%29+free%28T.ch%29%3B%5Cx05for%28i%3D0%2Cc%3Dchars%3Bc%3B%2B%2Bi%2C%2B%2Bc%29%3B+%2F%2F%E6%B1%82chars%E7%9A%84%E9%95%BF%E5%BA%A6i%5Cx05if%28%21i%29%7BT.ch%3DNULL%3BT.length%3B%7D%5Cx05else%5Cx05%7B%5Cx05%5Cx05if%28%21T.ch%3D%28char%2A%29malloc)
关于数据结构中的疑问?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).