- 论坛徽章:
- 0
|
改好了, 虽然ltrim(char *ss)传入地址, 但本质上还是传值,
因为形参和实参占用不同的内存地址, 但它们指向同一地址
方法一:返回字符指针:
char *ltrim(char *ss) {
char *p;
while( *ss == ' ') {
ss = ss+1;
printf("%p\n", ss);
}
p = ss;
return p;
}
main()
{
char *s;
s = " abc"; /* 比如s指向FFD0 */
s = ltrim(s); /* 现在s指向FFD2 */
printf("---%s---\n",s);
getchar();
return 0;
}
方法二:
void ltrim(char *ss);
int main()
{
char *s; s = (char *)malloc(10);
strcpy(s, " abc" /* 比如s指向FFD0 */
ltrim(s); /* 现在s仍指向FFD0, 但FFD0开始的字符串由" abc"\0变成了"abc"\0\0 */
printf("---%s---\n",s);
getchar();
free(s);
return 0;
}
void ltrim(char *ss)
{
int j=0;
int len=strlen(ss);
while(ss[0] == ' '){
for(j=0;j<len;j++)
ss[j]=ss[j+1];
}
}
方法一调用较麻烦,运行效率高;
方法二调用方便, 运行效率差;
有没可能综合方法一,二的优点,用指向指针的指针来实现?
[ 本帖最后由 sunshine1750 于 2007-4-20 15:51 编辑 ] |
|