char*&和char*

hipbone 2010-09-01 03:34:39
void fA(char* &s)
{
*s ='a';
}

void fB(char *s)
{
*s = 'b';
}



int _tmain(int argc, _TCHAR* argv[])
{
char a[] = "1234";
char *b = a;
printf("%s\n",a);
fA(b);
printf("%s\n",a);
fB(b);
printf("%s\n",a);
}
问题:1、char*&和 char* 有什么不同?
2、什么时候用char*& 什么时候用char*
...全文
963 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hipbone 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 cuihaoyun 的回复:]

接分

[/Quote]
帖已经结了!
hipbone 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ddlddy 的回复:]

#include<iostream>
using namespace std;
struct point
{
int x;
int y;
};

void changenum1(point *&pnum)
{
pnum = new point;
pnum->x = 4;

}
void changenum2(point *pnum)
{
pnum = ne……
[/Quote]

代码就编译不通过
hipbone 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dingshaofengbinbin 的回复:]

char *&是指针引用
cha *是指针
当用指针引用作为形参的时候,改变形参的指针,同时实参的指针也改变了。
当用指针做形参的时候,改变形参的指针,实参的指针不改变,当改变指针所指向的内容的时候,会同时改变。
如果你懂引用的,应该可以理解了。
#include<iostream>
using namespace std;
struct point
{
int x;
……
[/Quote]
解释得很好!谢谢了
hipbone 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhao4zhong1 的回复:]

指针即地址
引用即别名

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
[/Quote]
从汇编角度解释!6楼牛人耶!
fiter2004 2010-09-01
  • 打赏
  • 举报
回复
就楼主的代码来讲,没什么区别,如果改成下边的就有区别了
char p[5]=“aaaa”;
void fA(char* &s)
{
s=p;
}

void fB(char *s)
{
s=p;
}

int _tmain(int argc, _TCHAR* argv[])
{
char a[] = "1234";
char *b = a;
printf("%s\n",a);
fA(b);//运行完的结果:b==p,指针b被改变
printf("%s\n",a);
fB(b);//运行完的结果:b==a,指针b未被改变
printf("%s\n",a);
}
lzpkshy 2010-09-01
  • 打赏
  • 举报
回复
学习收了。。。
liutengfeigo 2010-09-01
  • 打赏
  • 举报
回复
指针即地址
引用即别名
龙哥依旧 2010-09-01
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
struct point
{
int x;
int y;
};

void changenum1(point *&pnum)
{
pnum = new point;
pnum->x = 4;

}
void changenum2(point *pnum)
{
pnum = new point;
pnum->x = 4;

}
void changenum3(point **pnum)
{
*pnum = new point;
*pnum->x = 4;

}
test1()
{
point *num=new point;
num->x=10;
changenum1(num);
std::cout<<num->x<<endl;

}
test2()
{
point *num=new point;
num->x=10;
changenum2(num);
std::cout<<num->x<<endl;

}
test3()
{
point *num=new point;
num->x=10;
changenum2(&num);
std::cout<<num->x<<endl;

}
void main()
{
test1();
test2();
test3();
}
运行结果是:
4
10
?
赵4老师 2010-09-01
  • 打赏
  • 举报
回复
指针即地址
引用即别名

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
dingshaofengbinbin 2010-09-01
  • 打赏
  • 举报
回复
char *&是指针引用
cha *是指针
当用指针引用作为形参的时候,改变形参的指针,同时实参的指针也改变了。
当用指针做形参的时候,改变形参的指针,实参的指针不改变,当改变指针所指向的内容的时候,会同时改变。
如果你懂引用的,应该可以理解了。
#include<iostream>
using namespace std;
struct point
{
int x;
int y;
};

void changenum1(point *&pnum)
{
pnum = new point;
pnum->x = 4;

}
void changenum2(point *pnum)
{
pnum = new point;
pnum->x = 4;

}
test1()
{
point *num=new point;
num->x=10;
changenum1(num);
std::cout<<num->x<<endl;

}
test2()
{
point *num=new point;
num->x=10;
changenum2(num);
std::cout<<num->x<<endl;

}
void main()
{
test1();
test2();
}

运行结果是:
4
10
白云飘飘飘 2010-09-01
  • 打赏
  • 举报
回复
char*&,通常需要更改指针本身并返回时才这样用。
pengzhixi 2010-09-01
  • 打赏
  • 举报
回复
一个是指针的引用,一个是指针
龙哥依旧 2010-09-01
  • 打赏
  • 举报
回复
关注一下
DontKissBossAss 2010-09-01
  • 打赏
  • 举报
回复
char* & 引用传参
char *按值 传参 

65,170

社区成员

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

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