|
发表于 2014-7-2 19:35:37
|
显示全部楼层
本帖最后由 折心灬小轩 于 2014-7-2 19:38 编辑
1.string是个指针,那么它指向的自然是一个地址,“i love china”是个常字符串,它是存储在静态区的一块内存的集合,这个集合是顺序的,即存储单元的编号是相连的,那么在string=“i love china”时,编译器用这个内存集合的首个存储单元的地址(也有可能是首个存储单元的首字节,这是特殊情况,不做过多处理)为指针赋值,也就是等于string=&'i';(如果这个语法可行的话,这里只是为了方便说明,不要纠结),这样就很好理解字符串指针了。最后总结一句,字符串用习惯就会了。
2.
我自己写的strlen为:
int strlen(const char *head)
{
int num=0;
for(const char *pre=head;*pre!='\0';num++,pre++);
return num;
}
这样的话,你应该懂得这样一个规则,不管是什么变量还是常量,只要作为参数传入strlen函数,都会被编译器把它解释成一个常量(地址),从这个地址一直开始,直到碰到字符结束符为止停止计数,所以你说的用*string作为参数传入strlen函数也是可以的,不过这样的目的就是把string指向的变量的指作为地址,因为不能确定string指向的变量的指,所以也就不能预测程序会从哪个地址开始检测,所以这种做法会增加程序的不稳定性和有效性,是错误的。
满意请采纳,不满意请追问
|
|