-4

If i have the following methods:

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

and when i use it in the main routine like this:

int a = 15;
addfive(a);

What will happen is that 5 will be added to a copy of the (a) variable. but if the method parameter is a pointer int* num instead of the int num 5 will be added to the (a) variable and no copy is created.

If I used the pointer in my method, will this use less memory that the first method, and will this work in non_void methods?

4

3 回答 3

0

如果您使用指针,它仍将使用内存,并且通常会小于类型使用的内存,但在您的特定情况下,根据您的系统(您的操作系统和应用程序),int * 可能使用比int更多的内存,使用 sizeof 查看类型和指针的大小,例如在 64 位构建的应用程序中使用此行:

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

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

于 2013-06-09T13:29:05.480 回答
0

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

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

于 2013-06-09T13:25:34.703 回答
0

首先 +5 应用于“a”的副本,然后

 int a = 15;
 addfive(a);

并且您的变量 a 不会改变,因为“a”是按值而不是引用传递的,如果您想要一个会改变 a 的函数,您必须使用指针或“ref”关键字

如果您使用的是 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 类中声明

于 2013-06-09T13:38:55.873 回答