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

问题描述 投票:-1回答:4

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

int x;
mymethod(x); 

mymethod(&x);
c pointers address-operator
4个回答
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;

0
投票

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


0
投票

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

int *ptr;

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

请阅读this useful introduction to the pointers

问候。


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的值是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 *之间的区别,而不是“按值”和“通过引用”将是非常自然的。

© www.soinside.com 2019 - 2024. All rights reserved.