PDA

View Full Version : اشارگر در جاوا چگونه است؟



rezaTavak
سه شنبه 16 فروردین 1384, 12:36 عصر
سلام

به برنامه زیر که در سی است نگاه کنید:




void Add1(int *a)
{
*a++;
}


main(){
int b=100;
Add1(&b);
printf(b);
}



معادل این برنامه در جاوا که بتواند از طریق ارجاع آدرس کار کند چیست؟ چون در جاوا اشارگر نداریم.

titbasoft
سه شنبه 16 فروردین 1384, 13:28 عصر
در java متغیر های عددی همیشه به صورت Call By Value پاس می شوند و object ها همیشه به صورت Call By Reference . حالا میشه یک کلک زد و اون اینکه متغیرتون رو به صورت یک property از یک object پاس کنید . مثال:

function byValue(a_variable) {
a_variable ++;
}

function byReference(an_object) {
an_object.x++;
}

var x = 12;
byValue(x);
alert(x); // displays 12

var y = new Object();
y.x = 12;
byReference(y);
alert(y.x); // displays 13

rezaTavak
سه شنبه 16 فروردین 1384, 19:16 عصر
سلام

راستش من میخوام یکسری توابع تاریخ را از سی به Java بیاورم. از تبدیل C2J زیاد خوشم نیومد. حالا به این مشکل برخوردم که برای تغییر در توابع از آدرس متغیر استفاده کرده.

در ضمن ضمن تشکر از شما من در JavaScript نمیخواهم در Java به صورت عام می خواهم. متشکرم. :flower:

rezaTavak
پنج شنبه 18 فروردین 1384, 11:02 صبح
سلام


اگر کلاس به تابع ارسال شود ارسال از طریق مرجع است مثال:





/*
* Main.java
*
* Created on April 5, 2005, 8:07 AM
*/

package prg1;

/**
*
* @author tavakol
*/
public class Main {

/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
NewInt aa = new NewInt();
aa.Value = 10;
Add1(aa);
System.out.println(aa.Value);

}
public static void Add1(NewInt b)
{
b.Value++;
}

}
class NewInt {
int Value;
}

hps
شنبه 20 فروردین 1384, 09:51 صبح
به جاى استفاده از این کلاس جدید
NewInt از
java.lang.Integer چرا استفاده نمى‌کنى. تمام انواع Primitive (مثل int یا long یا char) معادل کلاسى دارند.

rezaTavak
شنبه 20 فروردین 1384, 22:34 عصر
سلام

شما برنامه نمونه اش رابنویسید من نتونستم؟

البته از آرایه هم میشه استفاده کرد که خود آرایه ارسال شود ارسال از طریق مرجع است.