C# 从C和C中的函数访问返回值#
我对C/C++和C#中函数返回值的可用性这一概念表示怀疑。我知道返回指向函数中创建的变量(局部变量)的指针是不正确的。在这种情况下,如果我想创建一个值数组(比如int)并从函数返回这个数组,我该怎么做?另外,如果我直接返回一个局部变量(不是通过指向它的指针),那么运行时为该变量分配的内存何时被回收?是在返回的值被分配给该值的接收者之后 另一个相关问题是在C#中:在函数中使用C#中的“new”运算符创建的变量是在堆上创建的。对于在函数中创建的局部变量,这是真的吗?如果返回的值是引用/地址,那么它是否违反了上述规则(C++)?在C#中实现这一点的方式是什么 我的问题可能看起来很幼稚,但我正试图更好地理解编译器和运行时的行为。如果你能为我提供这些问题的答案,那将是非常有帮助的 谢谢,C# 从C和C中的函数访问返回值#,c#,c++,c,C#,C++,C,我对C/C++和C#中函数返回值的可用性这一概念表示怀疑。我知道返回指向函数中创建的变量(局部变量)的指针是不正确的。在这种情况下,如果我想创建一个值数组(比如int)并从函数返回这个数组,我该怎么做?另外,如果我直接返回一个局部变量(不是通过指向它的指针),那么运行时为该变量分配的内存何时被回收?是在返回的值被分配给该值的接收者之后 另一个相关问题是在C#中:在函数中使用C#中的“new”运算符创建的变量是在堆上创建的。对于在函数中创建的局部变量,这是真的吗?如果返回的值是引用/地址,那么它是
Rakesh.我不确定您的问题是什么,但要返回一个整数数组,您需要为其分配程序无法覆盖的内存,然后返回指向数组的指针,而不是数组本身:
int main(void)
{
int *i; //integer pointer
i = return_a_two_integer_array(); //i now points to the location in memory of the return value of return_a_two_integer_array();
free(i); //the memory is no longer allocated and can be overwritten
}
int *return_a_two_integer_array
{
int *two_integer_array;
if(!(two_integer_array = malloc(sizeof(int)*2))) //allocate the memory
{
return 0x00; //memory allocation failed
}
two_integer_array[0] = 1;
two_integer_array[1] = 2;
return two_integer_array; //return the pointer
}
顺便说一下,这是C语言
大宗报价
如果我想创建一个值数组(比如int)并返回
函数中的数组如何执行此操作
下面的代码将在C中执行此操作#
如果我直接返回一个局部变量(不是通过指针)
分配给它的内存是什么时候由
运行时-是否在将返回的值分配给接收方之后
这个价值
如果不返回指针,则只返回局部变量的副本。你问题的第二部分毫无意义
另一个相关的问题是C#:在函数中创建的变量
使用C#中的“new”运算符在堆上创建。这是真的吗
函数中创建的局部变量的数量
是的,它是在堆上创建的
如果返回的值是通过引用/地址返回的,这不是违反了吗
上面提到的规则(C++)?这是怎么回事
在C#中实现
<>你不应该尝试C++和C语言的比较,所以这个问题不应该回答。此外,正在取得的成就也不清楚
我的问题可能看起来很幼稚,但我试图理解其中的原因
编译器和运行时的性能更好。如果你能
你可以为我提供这些问题的答案
所有这些问题都在C++或C新手程序员的书中得到解决。
如果我想创建一个值数组(比如int)并从函数返回这个数组,我该怎么做
差异是分配变量的位置。局部变量在堆栈中分配,而全局变量在堆中分配。您可以(在程序中几乎任何位置)手动分配一些堆空间。这是通过我的malloc()(或类似)或某个内部调用malloc()的更高级别函数来完成的。使用“新建”创建新对象时就是这种情况
为了在C中返回数组,您必须使用堆:以您喜欢的方式(malloc()或new)分配一些堆空间,并返回指向它的指针(显式或通过返回对象引用)
在C语言中,您可以使用一个通用列表或一个数组,这两个数组都是使用new构造的
如果直接返回变量而不使用new(例如返回类型int),则使用堆栈。函数完成后,值将写入表示调用方变量的寄存器。C++和C#在这方面完全不同。你问的是哪种语言?如果你不再尝试比较C/C++和C#内存模型,你的境况会好得多。它们是完全不同的,应该被视为完全独立的概念。你这样做只会让你自己感到困惑。你的问题让我非常困惑:在你的标题中,你提到了C和C。在你的问题中,你似乎对C++和C语言感兴趣。在你的标签中,你有C,C,C++和C。这是三种不同的编程语言。问这样的问题会使回答有些困难。苹果和橘子。你应该指出这是你在C++中返回整数数组的方法。在我看来,返回数组的副本是可以接受的。这是C,它不是返回整数数组,而是返回指向整数数组所在内存地址的指针。我不知道任何C++。不过,我确实对你的帖子投了赞成票,因为它有更多的澄清。
public int[] Example(int size)
{
int[] numbers = new int[size];
return numbers;
}