小马甲又有问题了,请大家指导!(C++新手求助)

xiaomajia2009 2009-03-09 11:21:34
C++结构指针
看结构指针的时候,被绕晕了,请大家解惑!
#include <iostream.h>
struct couple
{
char man[];
char woman[];
};
void break_up(struct couple *ptr);
main()
{
struct couple JS={"John","Sara"};
struct couple *ptr;
ptr=& JS; //指针指向的是结构类型JS的地址?
break_up(ptr); //传递的参数是地址?
cout<<JS.woman<<"\n";
}
void break_up(struct couple *ptr) //参数是指针?
{
ptr->woman='c'; //ptr->woman不应该是地址么?如果改的是woman的第二个字母是写成ptr+1->woman=...?
}


有点晕,请大家指导一下!
...全文
139 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
smaltdd 2009-03-09
  • 打赏
  • 举报
回复
这个讲起来有点复杂,ptr是一个指针,ptr+1表示下一个struct couple的地址。对于不同类型的指针使用+1操作,系统会默认+sizeof(couple)的长度。
women的第二个字母应该用ptr->woman[1] = 'e';来表示。
这里你要吧struct couple看成一个整体,好比int,既然是结构吗,里面当然包含很多具体的类型。你可以使用sizeof(couple)看看他的长度。
你要获取woman的内容,当然要从woman这个数组取出。
我还是建议先看看书籍,巩固一下基础只是,数据结构,指针等等。
[Quote=引用 4 楼 xiaomajia2009 的回复:]
谢谢两位

但是还是有点问题,能把这个解答一下么?

如果改的是woman的第二个字母是写成ptr+1->woman=...?

如果不是,正确改法是?怎么让它输出的是:Sera

谢了~
[/Quote]
jssz103b 2009-03-09
  • 打赏
  • 举报
回复
ptr->woman[1] = 'e';
ztenv 版主 2009-03-09
  • 打赏
  • 举报
回复
main()
{
struct couple JS={"John","Sara"};
struct couple *ptr;
ptr=& JS; //指针指向的是结构类型JS的地址?是的,&是取地址符号
break_up(ptr); //传递的参数是地址? 与break_up的声明有关系的,所以要传couple的指针
cout<<JS.woman<<"\n";
}
void break_up(struct couple *ptr) //参数是指针?参数为couple的指针变量
{
ptr->woman='c'; //ptr->woman不应该是地址么?如果改的是woman的第二个字母是写成ptr+1->woman=...?
}
ptr的内容存储了js的地址值
ptr->woman:由->运算符提取所存地址的变量woman;
ptr存储的是js的地址值
ptr+1则是js的地址加一了,可能会产生错误(我不清楚js在内存中是如何存储的)
xiaomajia2009 2009-03-09
  • 打赏
  • 举报
回复
谢谢两位

但是还是有点问题,能把这个解答一下么?

如果改的是woman的第二个字母是写成ptr+1->woman=...?

如果不是,正确改法是?怎么让它输出的是:Sera

谢了~
  • 打赏
  • 举报
回复
#include <iostream.h>
struct couple
{
char man[];
char woman[];
};
void break_up(struct couple *ptr);
main()
{
struct couple JS={"John","Sara"};
struct couple *ptr;
ptr=& JS; //指针指向的是结构类型JS的地址? JS是实例化的结构,ptr是一个指向该结构的指针,主要之后,ptr指向JS这个实例,不理解吗?
break_up(ptr); //传递的参数是地址? //对,传的就是指针啊
cout<<JS.woman<<"\n";
}
void break_up(struct couple *ptr) //参数是指针? //就是,怎样了?
{
ptr->woman='c'; //ptr->woman不应该是地址么?如果改的是woman的第二个字母是写成ptr+1->woman=...? //JS.woman跟ptr->woman是一样,你理解了吗?
}
smaltdd 2009-03-09
  • 打赏
  • 举报
回复
把结构换成int来理解,先把指针搞明白,然后再去理解结构。

也就是把结构和指针分开,指针就是保存一个地址,具体看是个什么类型。说白了就是这个类型的首地址。

结构也就是复杂的类型,你把上面的程序所有sruct换成int看一遍就好理解了。

ptr=& JS; //指针指向的是结构类型JS的地址?
///指针ptr 就是用来保存地址的,所以把js地址刚给了ptr
break_up(ptr); //传递的参数是地址?
///这里也是一样的,变量是个指针,ptr就是指针,所以这样很正确。


建议看看C语言关于数组,指针的介绍相关书籍

还有一个和他有关联的引用,。综合的学习一下。
xiaomajia2009 2009-03-09
  • 打赏
  • 举报
回复
回帖赚十分
xiaomajia2009 2009-03-09
  • 打赏
  • 举报
回复
谢谢各位的帮忙

我在看C++入门的书,经常会有些地方不太懂!

以后请多指教@
passionboy03 2009-03-09
  • 打赏
  • 举报
回复
改为char *man的话,还得动态分配内存,感觉没必要,当然在外面也可以定义数组,把数组的名字传递给man,
woman 同理
[Quote=引用 11 楼 wushichao1987 的回复:]
貌似有很多地方编译通不过的。

char man[] ; //改为 char *man ;
char woman[] ; //char *woman ;

ptr->woman = 'c' ; //改为 ptr->woman = "c" ;

若改第二个字母的话,ptr->woman[1] = '2' ;

发的程序最起码自己要编译一下。
[/Quote]
passionboy03 2009-03-09
  • 打赏
  • 举报
回复
这样定义的话,注意一点
[Quote=引用 11 楼 wushichao1987 的回复:]
貌似有很多地方编译通不过的。

char man[] ; //改为 char *man ;给man定义大小man[20] char woman[] ;
//char *woman ; 同理

ptr->woman = 'c' ; //改为 ptr->woman = "c" ;

若改第二个字母的话,ptr->woman[1] = '2' ;

发的程序最起码自己要编译一下。
[/Quote]
passionboy03 2009-03-09
  • 打赏
  • 举报
回复
include <iostream.h>
struct couple
{
char man[];
char woman[];
};
void break_up(struct couple *ptr);
main()
{
struct couple JS={"John","Sara"};
struct couple *ptr;
ptr=& JS; //指针指向的是结构类型JS的地址? 是地址
break_up(ptr); //传递的参数是地址? 是的,也就是JS的首地址
cout<<JS.woman<<"\n";
}
void break_up(struct couple *ptr) //参数是指针?是指针,对指针指向的区域进行操作{
ptr->woman='c'; //ptr->woman不应该是地址么?如果改的是woman的第二个字母是写成ptr+1->woman=...?ptr->woman,这儿数组的名字代表的数组起始地址,也就是相当于woman[0] = 'c',[color=#00FF00]ptr+1->woman=...这个应该不可以吧,ptr->woman[1]='X',前提是声明woman时,要定义大小,不知道对不对,大侠指教[/color]
}
wushichao1987 2009-03-09
  • 打赏
  • 举报
回复
貌似有很多地方编译通不过的。

char man[] ; //改为 char *man ;
char woman[] ; //char *woman ;

ptr->woman = 'c' ; //改为 ptr->woman = "c" ;

若改第二个字母的话,ptr->woman[1] = '2' ;

发的程序最起码自己要编译一下。
doritosshenhui 2009-03-09
  • 打赏
  • 举报
回复
8楼说的对!
xylicon 2009-03-09
  • 打赏
  • 举报
回复
ptr->woman[1] = 'e'
rgmlkthh 2009-03-09
  • 打赏
  • 举报
回复
ptr+1->woman 跟 ptr->woman[1] 这个大不一样哦,你用ptr+1->woman 就输出下一个地址的woman值了, ptr->woman[1]就只是输出e了。

64,642

社区成员

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

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