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

#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的意思是什么,我删掉后程序运行后输出了一串地址。。。

再次感谢大神!!!!

oubitch23
浏览 1412回答 3
3回答

onemoo

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后应该就能明白了。
打开App,查看更多内容
随时随地看视频慕课网APP