Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C和C中的函数访问返回值#_C#_C++_C - Fatal编程技术网

C# 从C和C中的函数访问返回值#

C# 从C和C中的函数访问返回值#,c#,c++,c,C#,C++,C,我对C/C++和C#中函数返回值的可用性这一概念表示怀疑。我知道返回指向函数中创建的变量(局部变量)的指针是不正确的。在这种情况下,如果我想创建一个值数组(比如int)并从函数返回这个数组,我该怎么做?另外,如果我直接返回一个局部变量(不是通过指向它的指针),那么运行时为该变量分配的内存何时被回收?是在返回的值被分配给该值的接收者之后 另一个相关问题是在C#中:在函数中使用C#中的“new”运算符创建的变量是在堆上创建的。对于在函数中创建的局部变量,这是真的吗?如果返回的值是引用/地址,那么它是

我对C/C++和C#中函数返回值的可用性这一概念表示怀疑。我知道返回指向函数中创建的变量(局部变量)的指针是不正确的。在这种情况下,如果我想创建一个值数组(比如int)并从函数返回这个数组,我该怎么做?另外,如果我直接返回一个局部变量(不是通过指向它的指针),那么运行时为该变量分配的内存何时被回收?是在返回的值被分配给该值的接收者之后

另一个相关问题是在C#中:在函数中使用C#中的“new”运算符创建的变量是在堆上创建的。对于在函数中创建的局部变量,这是真的吗?如果返回的值是引用/地址,那么它是否违反了上述规则(C++)?在C#中实现这一点的方式是什么

我的问题可能看起来很幼稚,但我正试图更好地理解编译器和运行时的行为。如果你能为我提供这些问题的答案,那将是非常有帮助的

谢谢,
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;    

}