Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Какая аналогия С++-шных указателей в Java


Автор: soulcub 25.5.2010, 18:32
Код

public class NewA{

    private NewA() {
        int a[][] = new int [1][1];
        func(a); 
        System.out.println(a[0][0]);
    }

    private void func(int a[][]) {
        a = new int [1][1];
        a[0][0] = 2;
    }

    public static void main(String args[]) {
        new NewA();
    }
}


Почему в консоль не выводится число 2, и как сделать так, чтоб его вывело? Помню в С++, можно было передать указатель на что-либо и внутри функции это значение менялось глобально. Подскажите как так сделать в Java. Спасибоэ

Автор: AntonSaburov 25.5.2010, 18:37
Сударь, Вы передали в функцию один массив, потом сделали новый массив и в нем что-то поменяли. А старый остался таким каким был.
На С++ это тоже не сработало бы.

Автор: pathfinder 25.5.2010, 18:39
private void func(int a[][]) {
    a = new int [1][1];
    a[0][0] = 2;
}

Автор: Sibit 25.5.2010, 18:43
Потому что все объекты предаются по ссылке, что бы это работало определите массив как поле класса.
Код

public class NewA{
    int a[][];
    private NewA() {
        a[][] = new int [1][1];
        func(); 
        System.out.println(a[0][0]);
    }

   private void func(int a[][]) {
        a = new int [1][1];
        a[0][0] = 2;
    }



что-нибудь вроде этого.

Автор: soulcub 25.5.2010, 18:43
Ну в С++ я бы передал переменную со *(звёздочкой) и все изменения бы производились глобально) Я уже нашёл выход, надо было просто немного подумать) Но может у кого-то ещё возникнет такой вопрос)

Код

public class NewA{

    private NewA() {
        int a[][] = new int [1][1];
        a = func();
        System.out.println(a[0][0]);
    }

    private int[][] func() {
        int a[][] = new int [1][1];
        a[0][0] = 1;
        return a;
    }

    public static void main(String args[]) {
        new NewA();
    }
}


Так, потому что нужно было бы чтоб размеры задавались в самой функции) Простите что побеспокоил)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)