字符串地址的问题
这个程序是在字符串s的第i个位置插入字符串t
void insert(char *s, char *t, int i)
{
char ss[100];
char *p = s;
char *q = t;
char *r = ss;
strcpy(ss, p);
p += i - 1;
strcpy(p, q);
p += strlen(q);
r += i - 1;
strcpy(p, r);
//p-=i-1+strlen(q); 注意这里
}
为什么加不加p-=i-1+strlen(q);这行输出的结果是一样的呢?不加这行应该不是在字符串的第以个位置了阿?
问题点数:30、回复次数:7Top
1 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-04 09:43:16 得分 0
p是局部变量,不会该回到s的Top
2 楼yelling(Ray(←☆→射手))回复于 2006-03-04 10:01:35 得分 0
不影响到参数表的Top
3 楼province_(雍昊)回复于 2006-03-04 10:06:16 得分 0
所有的STRCPY全是针对S指向的内存地址的,拷贝结束后你再怎么折腾指针变量(而且还是局部)的数值也不会改变那段地址里的内容啊。Top
4 楼province_(雍昊)回复于 2006-03-04 10:07:57 得分 0
另外p += i - 1;
在I等于0的时候你看有什么问题吗?Top
5 楼zhanshua()回复于 2006-03-04 10:32:43 得分 0
你们的意思也就是说,形参和实参都是指向同一个地方,不管形参的地址怎么改变,实参的地址是不变的,改变的之是他的内容.Top
6 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2006-03-04 10:44:44 得分 0
strcpy(ss, p);
p += i;
strcpy(p, q);
p += strlen(q);
r += i;
strcpy(p, r);
Top
7 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 11:31:07 得分 0
//p-=i-1+strlen(q); 注意这里
~~~~~~~~~~·
传递行参不会改变实参中的位置,所以上面这一句是没有用的。
Top




