为了账号安全,请及时绑定邮箱和手机立即绑定

新手求解指针问题!!万分感激!!

新手求解指针问题!!万分感激!!

C++
oubitch23 2016-10-16 17:15:56
#include <iostream>using namespace std;int main(){ cout << "共多少位捐款者(输入 0 程序结束):"; int sum; cin >> sum; cin.get(); if ( sum > 0 ) { information * donor = new information[sum]; for ( int number = 0; number < sum; ++number) { cout << number + 1 << ")位捐款者:"; getline(cin, donor[number].name); cout << "   捐款数额:"; while( !( cin >> (donor+number)->momey ) || (donor+number)->momey <= 0 )           这里有疑问 { cin.clear(); while ( cin.get() != '\n' ) { continue; } cout << "请输入( > 0 )的数字:"; } cin.get(); } cout << "\n重要捐款者(Grand Patrons):\n"; int grand_patrons = 0; for ( int gp = 0; gp < sum; ++gp ) { if ( donor[gp].momey > GRAND ) { cout << gp + 1 << ")捐款者:" << donor[gp].name << " 捐款数额:" << donor[gp].momey << endl; ++grand_patrons; } } if ( grand_patrons == 0 ){cout << "无(none)。\n";} cout << "\n其他捐款者(Patrons):\n"; if ( grand_patrons != sum ) { for ( int gp = 0; gp < sum; ++gp ) { if ( donor[gp].momey <= GRAND ) { cout << gp + 1 << ")捐款者:" << donor[gp].name << " 捐款数额:" << donor[gp].momey << endl; } } } else  { cout << "无(none)。\n"; } cout << endl; delete [] donor; } else{cout << "无(none)。\n";} return 0;}中间输入钱的那里,donor+number的意思是什么,我删掉后程序运行后输出了一串地址。。。再次感谢大神!!!!
查看完整描述

3 回答

?
onemoo

TA贡献883条经验 获得超454个赞

donor的类型是指向information类型的指针

前面定义donor的代码是 information * donor = new information[sum];   这让donor指向了一块能连续存放sum个information的内存,你可以把这块内存看作是information数组,donor就指向了这个数组的首元素。


donor+number 中的number是个整型数,像这样“指针 + X数”的代码的效果就是指向“该指针后面第X个元素”——并不是让donor改变指向,而是相当于临时创建了一个指针,这个临时指针指向的是donor后面第number个元素。那么随后 (donor+number)->momey 就相当于访问donor后面第number个元素的momey成员

这代码是在for循环中的,for每次循环number自增一,配合 cin >> (donor+number)->momey 就是循环向那个information数组每一个元素的momey成员输入值...


你问的“我删掉后程序运行后输出了一串地址”,我不知道你是具体把哪里删掉了。反正你删掉哪里都会有问题的,你理解了donor+number后应该就能明白了。

查看完整回答
1 反对 回复 2016-10-17
  • 3 回答
  • 1 关注
  • 1411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信