2013-06-15 3 views
0

Я знаю, это может показаться простым, но это не имеет смысла для меня.Понимание указателей

Что мне нужно сделать: Мне нужно запросить баланс аккаунта A в одной функции, вернуться к основному, вызвать для баланса счета B в другой функции, вернуться к основному, а затем мне нужно передать обе переменные в другую функцию, сравнить, которая больше, и установить мой указатель на баланс или на баланс. Мне нужно затем манипулировать балансом счета в другой функции, манипулируя указателем.

Мое понимание происходящего: , передавая обе переменные в функцию и устанавливая указатель на большую учетную запись, я могу манипулировать указателем и, в свою очередь, будет манипулировать значением либо balanceA, либо balanceB, в зависимости от того, что больше (простой IF)

Мое понимание (или его отсутствие) синтаксиса: Мне нужно передать две переменные счета по ссылке и в моей функции сравнения мне нужно создать новую переменную-указатель, которая будет установлена равный балансу счета, который выше.

Мой главный вопрос: Где я объявляю свой указатель и какой правильный синтаксис для этого. Где все мои & и вы идете?

Мой код до сих пор:

#include <iostream> 
using namespace std; 

float getBalanceA(); 
float getBalanceB(); 

int main() 
{ 
    float balanceA = getBalanceA(); 
    float balanceB = getBalanceB(); 

    return 0; 
} 

float getBalanceA() 
{ 
    float balanceA = 0; 

    cout << "What is Sam's balance? "; 
    cin >> balanceA; 

    return balanceA; 
} 

float getBalanceB() 
{ 
    float balanceB = 0; 

    cout << "What is Sue's balance? "; 
    cin >> balanceB; 

    return balanceB; 
} 

Заранее спасибо за помощь!

ответ

1

Используйте & (оператор ссылки) для создания указателя на переменную, используйте * (оператор разыменования), чтобы получить значение, на которое ссылается данный указатель.

Вы ищете что-то вроде следующего:

float* getLarger(float* a, float* b) 
{ 
    if (*a > *b) // dereference pointers to compare the values 
     return a; 
    else 
     return b; 
} 

int main() 
{ 
    float balanceA = getBalanceA(); 
    float balanceB = getBalanceB(); 
    float* largerBalance = getLarger(&balanceA, &balanceB); // obtain pointers to balanceA/balanceB and pass them to the getLarger functoin 
    *largerBalance += 1; // manipulate the larger balance by dereferencing it 
    cout << "Sam's balance: " << balanceA << endl; 
    cout << "Sue's balance: " << balanceB << endl; 
    return 0; 
} 
+0

Отлично! Спасибо, что объяснили разницу между операторами & и *. Это был полный момент лампочки, очень ценимый! – ThomasNichols89

+0

Кроме того, поскольку вы упомянули пропущенную ссылку, возможно, более правильным примером будет использование 'float &' вместо 'float *' (операторы ссылки '*' и '&' здесь не являются (de), а модификаторы типов используется для указания указателя на тип и ссылки на тип). Ссылки - это в основном указатели с более естественным синтаксисом (вы используете их как обычные переменные), но вы не можете изменить переменную, на которую ссылаются, после ее первоначальной настройки. – riv

+0

Исправьте меня, если я ошибаюсь (мой код работает сейчас, так что я не думаю, что я есть), но мне нужно передать указатель без оператора *, а затем внутри функции, когда я манипулирую своими данными, я хочу включить * для получения фактических данных, а не указателя. Еще раз спасибо за помощь в понимании этой концепции. – ThomasNichols89

Смежные вопросы