减少记忆方法

时间:2013-06-09 13:20:00

标签: c# c++ c pointers methods

如果我有以下方法:

void addfive(int num)
{
    num = num + 5;
}

当我在主程序中使用它时:

int a = 15;
addfive(a);

将会发生的是将5添加到(a)变量的副本中。 但是如果方法参数是指针int* num而不是int num 5,则会将其添加到(a)变量中,而不会创建副本。

如果我在我的方法中使用了指针,那么第一种方法会使用更少的内存吗?这会在non_void方法中使用吗?

3 个答案:

答案 0 :(得分:0)

它的实现定义了传递指针是否需要比传递整数更多或更少的内存。例如,在MS Visual Studio int中需要4个字节,而指针需要4个字节用于32位平台,8个字节用于x64系统。

通常为sizeof(int) <= sizeof(int*)

答案 1 :(得分:0)

如果你使用指针,它仍然会使用内存,它通常会少于一个类型使用的内存,但在你的特定情况下,取决于你的系统(你的操作系统和应用程序) int *可能比 int 使用更多内存,使用sizeof查看类型和指针的大小,例如在应用程序的64位版本中使用此行:

std::cout << "Size of int is: " << sizeof(int) << ", size of int* is: " << sizeof(int*) << "\n";

但是,通过指针或引用传递的另一种用法是能够对函数进行编码,以便在作为参数传递的对象(或类型构建)上留下副作用。

答案 2 :(得分:0)

首先将+5应用于&#34; a&#34;和

 int a = 15;
 addfive(a);

并且你的变量a不会改变,因为&#34; a&#34;如果你想要一个会改变你的函数你必须使用指针或者&#34; ref&#34;关键字

如果您使用的是c或c ++ 你的代码应该喜欢这个

addfilve(*a)
{
   *a = *a + 5;
}
int main()
{
int a = 15;
int *aptr ;
aptr = &a;

return 0;
}

但是如果你使用c#

addfive(ref a)
{
  a += 5;
}

以及何时使用该功能

double a = 5;
addfive(ref a); // a = 10 now

请注意,这是一种正常的功能而不是扩展方法

例如,如果您正在编写表单应用程序,则必须在Form1类中声明