【问题标题】:What is the difference between mymethod(i) and mymethod(&i) in C?C 中的 mymethod(i) 和 mymethod(&i) 有什么区别?
【发布时间】:2011-03-06 11:38:58
【问题描述】:

我想知道调用这样的方法有什么区别:

int x;
mymethod(x); 

mymethod(&x);

【问题讨论】:

  • cargarage (:joke:)
  • @n00b:我不明白这个笑话......
  • 如果您需要更多信息,请在谷歌上搜索“C 指针”。他们会解释 x、*x 和 &x :)
  • @Cody 那不是我停在哪里我的汽车:O

标签: c pointers address-operator


【解决方案1】:

因为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;

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      int *ptr;
      

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

      请阅读this useful introduction to the pointers

      问候。

      【讨论】:

        【解决方案4】:

        在该行中: 整数 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; //

        如果有这样声明的方法: void mymethod(int x) 比我们传递 x 的值,所以该方法被称为 mymethod(x)。

        如果有这样声明的方法: void mymethod(int* x) 比我们传递一个 POINTER 到 x 的地址,所以这个方法被称为 mymethod(&x)。

        这真的只是冰山一角,我真的尽量保持简单,所以如果你还有其他问题,尽管问!

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-21
          • 2021-08-25
          • 2021-12-30
          相关资源
          最近更新 更多