2015-09-08 5 views
-4

Я пытаюсь что-то сделать на C++, и у меня есть проблема. У меня есть этот код:Параметр функции int не работает должным образом

#include <iostream> 
#include <string> 
//---MAIN--- 
using namespace std; 
int af1 = 1; 
int af2 = 1; 

void lettersort(int cnt1) { 
    cout << "RESULT:" << cnt1 << endl; 
    cnt1++; 
    cout << "RESULT WHEN+:" << cnt1 << endl; 
    cout << "RESULT IN GLOBAL INT:" << af2 << endl; 
} 

int main() 
{ 
    lettersort(af2); 
    return 0; 
} 

Так есть ли способ, так что cnt1++ влияет af2 тоже, чтобы сделать его больше? Я не хочу использовать af2++ напрямую, потому что иногда хочу использовать af1.

+0

Это не называется "пустота", это называется * функция *. «void» - это тип. – molbdnilo

ответ

3

На данный момент вы просто проходя af2 к cnt1по значению, поэтому любые изменения в cnt1 строго локальные по отношению к функции lettersort. Чтобы получить нужное поведение, вам необходимо передать cnt1 параметр по ссылке. Изменение:

void lettersort(int cnt1) 

к:

void lettersort(int &cnt1) 
+0

Omg THANS SO MUTCH, я не знал, что это так просто. TNX :) – Dushan01

2

Вы передаете аргумент по значению. I.e., вы копируете значение af1 в локальную переменную в lettersort. Затем это целое число увеличивается и удаляется, когда функция заканчивается, не затрагивая оригинал af1. Если вы хотите, чтобы функция, чтобы иметь возможность влиять на af1, вы должны передать аргумент по ссылке:

void lettersort(int& cnt1) { // Note the "&" 
1

если я понял ваш вопрос:

есть 2 способа вы можете сделать это.

  1. сделать lettersort функция возвращает новое значение, и положить его в aF2

    int lettersort(int cnt1) { 
        cout << "RESULT:" << cnt1 << endl; 
        cnt1++; 
        cout << "RESULT WHEN+:" << cnt1 << endl; 
        cout << "RESULT IN GLOBAL INT:" << af2 << endl; 
        return cnt1; 
    } 
    int main() 
    { 
    af2 = lettersort(af2); 
    return 0; 
    } 
    
  2. передать значение по ссылке. вы можете прочитать об этом here, но обычно это о передаче указателя на это значение. что бы вы ни делали в аргументе, который вы передаете, произойдет на исходном var.

пример:

void foo(int &y) // y is now a reference 
    { 
     using namespace std; 
     cout << "y = " << y << endl; 
     y = 6; 
     cout << "y = " << y << endl; 
    } // y is destroyed here 

    int main() 
    { 
     int x = 5; 
     cout << "x = " << x << endl; 
     foo(x); 
     cout << "x = " << x << endl; 
     return 0; 
    } 
1
  • здесь нужно просто изменить аргумент пропуск lettersort функцию передается по ссылке.
  • , например, если объявить и инициализировать любую переменную, как:

    int a=10; int &b = a; 
    
  • ныне и б относятся к тому же value.if вы меняете то изменения также отражают в Ь также.

  • так,

    cout << a; cout << b; 
    
  • как оператор производит один и тот же результат по всей программе.поэтому используя эту концепцию я модифицировал аргумент функции и сделал это как по ссылке .

  • Ваш правильный код:

    #include <iostream> 
    
    
        #include <string> 
        using namespace std; 
        int af1 = 1; 
        int af2 = 1; 
        void lettersort(int &cnt1) { 
        cout << "RESULT:" << cnt1 << endl; 
        cnt1++; 
        cout << "RESULT WHEN+:" << cnt1 << endl; 
        cout << "RESULT IN GLOBAL INT:" << af2 << endl; 
        } 
    
        int main() 
        { 
        lettersort(af2); 
        return 0; 
        } 
    
Смежные вопросы