如果我有以下方法:
void addfive(int num)
{
num = num + 5;
}
当我在主程序中使用它时:
int a = 15;
addfive(a);
将会发生的是将5添加到(a)变量的副本中。
但是如果方法参数是指针int* num
而不是int num
5
,则会将其添加到(a)变量中,而不会创建副本。
如果我在我的方法中使用了指针,那么第一种方法会使用更少的内存吗?这会在non_void方法中使用吗?
答案 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类中声明