c++中指针数组问题,希望各位不吝赐教!

cxs812747475 2014-10-31 02:41:53
#include<iostream>
using namespace std;
int main()
{
char *a[2]={"aaa","bbb"};
cout<<"函数调用前"
<<" "
<<a//指针数组a首元素地址
<<" "
<<a[0]//指针数组的第一个元素
<<" "
<<a[1]//指针数组第二个元素
<<endl;
void change(char *a[]);//函数声明
change(a);//调用sort()
cout<<"函数调用后"
<<" "
<<a
<<" "
<<a[0]
<<" "
<<a[1]
<<endl;
return 0;
}
void change(char *a[])
{
char *temp;
temp=a[0];
a[0]=a[1];
a[1]=temp;
}


问题描述:1.change()函数应该是交换指针数组的元素,交换的结果应该不能带回main()函数的。但是在输出时却与原来不一样了,这是怎么回事?
2.还有在main函数中cout<<a[0],a[0]是指针数组的一个元素,存放的是aaa的地址,为什么输出的是却是aaa,反而*a[0]会输出a呢?
...全文
207 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
cout后面跟一个字符串的首地址你试试输出什么,其次,你传入的是一个二维数组的首地址,再说了这里也就是两个字符串的首地址,你交换了地址,退出函数当然也要保存,所以最后值才有换的
rickys2080 2014-10-31
  • 打赏
  • 举报
回复
1. 传入的是数组首地址,会改变其内容并影响main里的输出; 2. a[0]是个地址,*a[0]是个字符
幻夢之葉 2014-10-31
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{	
	char *a[2]={"aaa","bbb"}; // 声明一个有两个元素的数组 a[2] , 它们元素的类型是char*, 即a[0]是一个char*,指向字符串“aaa”, a[1]同理指向“bbb“

    return 0;
}
void change(char *a[]) // 因为a[0], a[1]里面存储的是char*指针,所以对它们进行交换,分别指向"bbb"和”aaa“
{
}
cxs812747475 2014-10-31
  • 打赏
  • 举报
回复
引用 6 楼 linux_hsylar 的回复:
你想个最简单的例子,排序算法中传入的数组形参,为什么在函数内部改变数组各个元素的位置后,在main中顺序也改变,说明数组这玩意做形参的时候不是值传递,,而是传数组首地址进去的,你在函数内部的修改都会改变数组
真心感谢!这个我搞了好几天,做数组的时候每台注意这点,不过也有收获,其中各种调试让我对指针的印象深刻了许多
linux_hsylar 2014-10-31
  • 打赏
  • 举报
回复
你想个最简单的例子,排序算法中传入的数组形参,为什么在函数内部改变数组各个元素的位置后,在main中顺序也改变,说明数组这玩意做形参的时候不是值传递,,而是传数组首地址进去的,你在函数内部的修改都会改变数组
linux_hsylar 2014-10-31
  • 打赏
  • 举报
回复
永远记住,数组和普通的形参不一样,
cxs812747475 2014-10-31
  • 打赏
  • 举报
回复
引用 1 楼 tixisong 的回复:
1.change()函数应该是交换指针数组的元素,确实是这样,因为这个数组存的是char *指针 2.a[0]存的是“aaa"字符串的首地址,*a[0]取的就是首地址的值。
你回答的第一问:既然是交换了数组元素,输出时为什么结果输出不一样啊?数组元素交换在change中完成,在main中又没有交换.我想知道输出加过改变的原因,谢谢,可以为我解答下吗
cxs812747475 2014-10-31
  • 打赏
  • 举报
回复
change()函数中只是交换了形参的元素,为什么会影响到实参?如果没有影响到实参那输出结果为什么变了?或者说在change()函数中的代码直接影响了实参指针数组中元素(都是地址)指向的字符串?
cxs812747475 2014-10-31
  • 打赏
  • 举报
回复
恩,第一问你也说是交换元素,但交换的是形参,形参的改变应该是不能影响实参的啊,但是输出结果却改变了
tixisong 2014-10-31
  • 打赏
  • 举报
回复
1.change()函数应该是交换指针数组的元素,确实是这样,因为这个数组存的是char *指针 2.a[0]存的是“aaa"字符串的首地址,*a[0]取的就是首地址的值。

64,683

社区成员

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

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