成长的意义 发表于 2013-10-6 11:31:03

C 的指向互换问题

首先感谢看我问题的各位,如果能帮我解答我再次表示感谢,刚注册的没什么资金悬赏。。。。
刚开始学C,遇到点问题。
直接上

#include<stdio.h>
int main()
{
   voidcha(char*,char*);
   void chx(char*[]);
   char *ch[]={"oooo","xxxx"};
   char *o="zzzz",*p="llll";
   printf("first %s\n",ch);
   printf("first %s\n",ch);
   printf("first %s\n",o);
   printf("first %s\n\n",p);
   cha(o,p);
   chx(ch);

   printf("now %s\n",ch);
   printf("now %s\n",ch);
   printf("now %s\n",o);
   printf("now %s\n",p);
}
void cha(char*a,char*b)
{
char *q;
q=a;
a=b;
b=q;
}
void chx(char*a[])
{
char *q;
q=a;
a=a;
a=q;
}
为什么zzzz跟llll没有实现互换,仅仅是将一个指针数组分成了两个单独的指针。。。。。
求解啊。。。。

牡丹花下死做鬼 发表于 2013-10-6 11:31:04

当然不会了啊void cha(char*a,char*b)
{
        char *q;
        q=a;
        a=b;
        b=q;
}这里 只改变了 a b 和 main函数重的 o p 没什么关系啊 只不过一开始把o的值赋值给a 把p的值赋值给b而已但无论在cha 函数中怎么改变 a b 都是不会改变 o p 的
但是改变*a *b 就会影响*o *p的值void chx(char*a[])
{
        char *q;
        q=a;
        a=a;
        a=q;
}这个函数的话
应为把数组名复制给a了 所以这里 对a a操作就相当于上面对 *a *b操作 这样当然 在main函数中输出
chch会发生变化了

简而言之 在自定义函数中改变指针的值是不会影响到main函数的 但是改变指针指向的值 如*a 就会影响了

成长的意义 发表于 2013-10-6 14:20:00

牡丹花下死做鬼 发表于 2013-10-6 11:31 static/image/common/back.gif
当然不会了啊这里 只改变了 a b 和 main函数重的 o p 没什么关系啊 只不过一开始把o的值赋值给a 把p的值赋值 ...

非常感谢。。

trek600 发表于 2013-10-7 20:55:24

慢慢来最好画内存图
页: [1]
查看完整版本: C 的指向互换问题