两个函数输出结果一致吗?

CPFeng0124 2011-04-04 07:11:53
两个函数输出结果一致吗?如果不一致,请说明什么情况下结果不一致啊(或者举出具体例子)谢谢啦
void change1(int *pa,int *pb)
{
*pa = *pa+*pb;
*pb = *pa - *pb;
*pa = *pa - *pb;
}
void change2(int *pa,int *pb)
{
int temp;
temp = *pa + *pb;
*pa = temp - *pa;
*pb = temp - *pa;
}
==========================================================
extern int funA();
extern int funB();
int total1()
{
return funA() + funB();
}

int total2()
{
return funB() + funA();
}

===========================================================

char *fun1()
{
char ach[] = "123";
return ach;
}

char * fun2()
{
char * pch = "123";
return pch;
}
=================================================
大家随便聊聊啊,知道多少说多少啊。谢谢啦。
...全文
132 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mark0904 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luohaohahaha 的回复:]
char *fun1()
{
char ach[] = "123";
return ach;
}

char * fun2()
{
char * pch = "123";
return pch;
}
前者编译器会报错。
后者虽不报错,但是返回值是只读的,不允许修改。因为字符串“123”在常量区。
[/Quote]
同上。
char *fun1()
{
char ach[] = "123";
return ach;
}
fun1()可以通过char *ach = (char *)malloc(4);
ach = "123";

return ach;来实现
wangw89 2011-04-04
  • 打赏
  • 举报
回复
前两个应该一样的吧
后面一个:[Quote=引用 2 楼 luohaohahaha 的回复:]
char *fun1()
{
char ach[] = "123";
return ach;
}

char * fun2()
{
char * pch = "123";
return pch;
}
前者编译器会报错。
后者虽不报错,但是返回值是只读的,不允许修改。因为字符串“123”在常量区。
[/Quote]
無_1024 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 uruana 的回复:]
前两个感觉一样。
char *fun1()
{
char ach[] = "123";//这个字符串被存储于数组中,函数返回时撤销
return ach;
}

char * fun2()
{
char * pch = "123";//这里的字符串为常量,是静态存储的,程序结束时才撤销
return pch;
}
[/Quote]
至于第一题 结果是相同的
第二题 级差不多是这样的


char * fun2()
{
static char * pch = "123";//我一般这样写
return pch;
}
MATHPHYSIC 2011-04-04
  • 打赏
  • 举报
回复
这个好像是指针地址传递类型的问题吧!!我好像在哪里看到过,第一个类似的问题
luohaohahaha 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cpfeng0124 的回复:]

一个NB的人给我的作业,我表示压力很大,看起来确实是你们说的这样的啊,但是我有点不自信,总觉得暗含了深奥的东西在里面哦
[/Quote]
不同的人看东西有不一样的感觉,
你觉得深奥的东西,别人未必这样觉得、
同理,你觉得简单的东西,别人也许觉得很难的。
但就lz这个问题看,要相信自己的看法。
只有相信编译器出来的结果。
CPFeng0124 2011-04-04
  • 打赏
  • 举报
回复
一个NB的人给我的作业,我表示压力很大,看起来确实是你们说的这样的啊,但是我有点不自信,总觉得暗含了深奥的东西在里面哦
从吾所好 2011-04-04
  • 打赏
  • 举报
回复
前两个感觉一样。
char *fun1()
{
char ach[] = "123";//这个字符串被存储于数组中,函数返回时撤销
return ach;
}

char * fun2()
{
char * pch = "123";//这里的字符串为常量,是静态存储的,程序结束时才撤销
return pch;
}
vanguards 2011-04-04
  • 打赏
  • 举报
回复
个人感觉结果是一样,不过表示的含义不同,楼主想法是什么?
d741963250 2011-04-04
  • 打赏
  • 举报
回复
同楼上。
luohaohahaha 2011-04-04
  • 打赏
  • 举报
回复
char *fun1()
{
char ach[] = "123";
return ach;
}

char * fun2()
{
char * pch = "123";
return pch;
}
前者编译器会报错。
后者虽不报错,但是返回值是只读的,不允许修改。因为字符串“123”在常量区。
luohaohahaha 2011-04-04
  • 打赏
  • 举报
回复
个人感觉一二两个 输出结果应该一样。
第三个不一样。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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