交换指针 指针指向字符串

hhhio110 2011-12-13 03:25:07
void exchange(char *x,char * y)
{
char *p = x;
x = y;
y = p;
cout<<x<<" "<<y<<endl;
}

我想要通过交换指针的方式交换指针指向的字符串, 比如 指针a指向“as“ ,指针b指向“zx” ,我想交换成a指向”zx“,b指向”as“, 但是这样只能在函数中改变 指针没办法传引用 应该怎么做
...全文
203 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-12-13
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
赵4老师 2011-12-13
  • 打赏
  • 举报
回复
#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char *p1="1" ,*p2="2" ;
char c1=1 , c2=2 ;
short s1=1 , s2=2 ;
int i1=1 , i2=2 ;
__int64 I1=1i64, I2=2i64;
float f1=1.0f, f2=2.0f;
double d1=1.0 , d2=2.0 ;
void main() {
SWAP((int)p1,(int)p2); printf("char * %5s, %5s\n",p1,p2);
SWAP(c1,c2); printf("char %5d, %5d\n",c1,c2);
SWAP(s1,s2); printf("short %5d, %5d\n",s1,s2);
SWAP(i1,i2); printf("int %5d, %5d\n",i1,i2);
SWAP(I1,I2); printf("__int64 %5I64d,%5I64d\n",I1,I2);
SWAP(*(int *)&f1,*(int *)&f2);printf("float %5g, %5g\n",f1,f2);
SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double %5lg, %5lg\n",d1,d2);

SWAP(c1,c1);
printf("%d\n",c1);
}
//char * 2, 1
//char 2, 1
//short 2, 1
//int 2, 1
//__int64 2, 1
//float 2, 1
//double 2, 1
//2
zero_226 2011-12-13
  • 打赏
  • 举报
回复
我记得用指针做参数的话,不能在函数里改变指针的值,但可以改变指针指向的地址的内容。
hhhio110 2011-12-13
  • 打赏
  • 举报
回复
非常的感谢
iamnobody 2011-12-13
  • 打赏
  • 举报
回复
exchange(&b[min],&b[c]);//用指针
hhhio110 2011-12-13
  • 打赏
  • 举报
回复
我试了下void exchange(char *&x,char * &y) 不修改exchange(b[min],b[c]);就可以了
但是如果用那个指向指针的指针的话就不行 如果我想要用指向指针的指针的话要怎么做?
iamnobody 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hhhio110 的回复:]
这样的话怎么传递 void sort(char *b[])
{
for(int a = 0; a < 4;a++)
{
int min = a;
int c = a;;
for(int i = a+1;i < 5;i++)
if(strcmp( b[min],b[i] ) > 0)
c = i;
exchange(b[min],b[c]);
}
}


最后那个exch……
[/Quote]
就这样就行了。如果有错也是你的算法的错。
hhhio110 2011-12-13
  • 打赏
  • 举报
回复
这样的话怎么传递 void sort(char *b[])
{
for(int a = 0; a < 4;a++)
{
int min = a;
int c = a;;
for(int i = a+1;i < 5;i++)
if(strcmp( b[min],b[i] ) > 0)
c = i;
exchange(b[min],b[c]);
}
}


最后那个exchange(b[min],b[c]); 要怎么改
鸟辉 2011-12-13
  • 打赏
  • 举报
回复
顶。此为指针的应用,比较好理解。
[Quote=引用 1 楼 pengzhixi 的回复:]

void exchange(char *&x,char * &y)
[/Quote]
tonywearme 2011-12-13
  • 打赏
  • 举报
回复
使用指向指针的指针即可:

void exchange(char **x,char ** y)
{
char *p = *x;
*x = *y;
*y = p;
cout<<*x<<" "<<*y<<endl;
}
pengzhixi 2011-12-13
  • 打赏
  • 举报
回复
void exchange(char *&x,char * &y)

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧