c++菜鸟问一个关于传递结构的地址的问题

digiworm 2004-09-23 10:11:33
这是c++primer plus 4th 上的一道练习题,应该是7_3.
/*Here is a structure template:

struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};

a.Write a function that passes a box structure by value and that displays
the value of each member.
b.Write a function that passes the address of a box structure and that sets
the volume member to the product of the other three dimensions.
c.Write a simple program that uses these two functions */

#include<iostream>
using namespace std;

struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};

void showbox(box b);
void setbox(box* pb);

int main()
{
box digiworm={"Digiworm",3,4,5};
setbox(&digiworm);
showbox(digiworm);
return 0;
}

void showbox(box b)
{
cout<<"Box maker: "<<b.maker<<endl;
cout<<"height: "<<b.height<<endl;
cout<<"width: "<<b.width<<endl;
cout<<"length: "<<b.length<<endl;
cout<<"volume: "<<b.volume<<endl;
}

void setbox(box* pb)
{
pb->volume=pb->height*pb->width*pb->length;
}

我的问题是:
setbox函数并没有返回volume的值,它是如何让后面的showbox知道volume的值的。
我也知道这是指针的妙用,但还是不太理解。
我刚学c++不久,所以很菜。
有人帮我吗?
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
photnman 2004-09-23
  • 打赏
  • 举报
回复
我觉得你先不要搞c++
先学习c好了,学完c,你的基本概念就有了
daylove 2004-09-23
  • 打赏
  • 举报
回复
指针直捣黄龙,叫你还敢做小动做吗?虽然没有返回,但那个指针仍然是指向那个地址,地址没有边,而那个地址上的值边了,所以你就可以调用修改过的值了。
langzi8818 2004-09-23
  • 打赏
  • 举报
回复
弄清楚传地址和传值的区别就好了
realmz 2004-09-23
  • 打赏
  • 举报
回复
同意,指针直接修改了内存地址中存的值。
kobefly 2004-09-23
  • 打赏
  • 举报
回复
^_^,传指针就是传地址,有了钥匙就可以开门,想拿什么就拿什么,想砸什么就砸什么
呵呵
beyondtkl 2004-09-23
  • 打赏
  • 举报
回复
这就是指针的妙用。。悄悄的修改你的东西 呵呵
hcj2002 2004-09-23
  • 打赏
  • 举报
回复
如楼上所说。

通过指针参数改变了指针所指向地址中的内容
pacman2000 2004-09-23
  • 打赏
  • 举报
回复
因为传进去的是指针,也就是变量的地址,所以函数里可以通过访问这个地址来修改里面的内容,因此函数执行完,地址指向的内容就发生了变化。
  • 打赏
  • 举报
回复
在C中,函数要修改参数内容就得用指针型。
nickshen 2004-09-23
  • 打赏
  • 举报
回复
这是c的内容和c++的面向对象关系不大,搂主应该温温书
goodluckyxl 2004-09-23
  • 打赏
  • 举报
回复
传入地址修改地址中的内容是允许的

你传入box对象的地址,修改地址里面存放的内容后一切都是不可恢复


64,646

社区成员

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

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