mymethod(i)和mymethod(& i)在C中有什么区别?

时间:2011-03-06 11:38:58

标签: c pointers address-operator

我想知道调用类似方法之间的区别是什么:

int x;
mymethod(x); 

mymethod(&x);

4 个答案:

答案 0 :(得分:2)

因为C总是按值调用,如果希望函数能够更改函数本身内部的x ,则必须传递x的地址。

mymethod(x);

将传递x ,例如,如果x为2,您也可以写mymethod(2)

mymethod(&x)

会将地址传递给x 。现在该方法可以更改存储在该地址的值,因此在函数完成后,x的实际值可能已经更改。

现在你也可以声明一个指针:

int* y; //y is now a pointer to a memory address
y = &x; //y now points to the memory address of x;
*y = 5; will set the "value found at the address y" to 5, thus will set x to 5;

答案 1 :(得分:0)

mymethod(x)传入整数x作为参数。 mymethod(&x)传递x内存中的地址。如果你需要一个指向int的指针作为参数,那么你将使用第二个。

答案 2 :(得分:0)

简而言之,当您声明一个指针时,在它前面加一个星号:

int *ptr;

当您传递&x而不是x时,您传递的是内存地址。

请阅读this useful introduction to the pointers

问候。

答案 3 :(得分:0)

在线: int x;

你分配一块大小为“int”的内存。 对于这个解释,我们假设int的大小是4个字节(可能不是4个字节)。

所以在行“int x;”之后存储器中有4个字节分配给“x”。 “x”的值在这4个字节内: 例如,如果x = 4那么它将在内存中查找如下: [0,0,0,4]或二进制[0000000,00000000,00000000,00000010]。 (在现实生活中它也可能是[4,0,0,0],但我不会进入那个。)

所以x的 VALUE 是4。

但是让我说我​​想要“x”的地址,它放在内存中。 这是运营商“&”的地方发挥作用,使用此运算符我请求 x的地址

所以如果[0,0,0,4]从内存中的“0x12341234”位置开始,& x将返回该值(0x12341234)。 现在,如果我想将地址存储在变量中,则此变量的类型不是“int”,但是指向int的地址,其被标记为“int *”。

所以:

int x = 4; //< - 分配4个字节的内存,并用数字4填充其值。 int * pointer_to_x =& x; //< - pointer_to_x指向x在内存中的地址。

如果有一个声明的方法如下: void mymethod(int x),而不是传递x的值,因此该方法被称为mymethod(x)。

如果有一个声明的方法如下: void mymethod(int * x),而不是将POINTER传递给x的地址,因此该方法被称为mymethod(& x)。

这真的是冰山一角,我真的尽力保持简单,所以如果你还有其他问题,那就问问吧!

还有一些称为“按值”和“按引用”的术语,但您仍然需要更好地理解int和int *之间的区别,而不是“按值”和“按引用”将是非常自然的。