C# 如何在C中打印n次n而不使用循环、递归或goto# 我在C++中有这个代码,但是我想在C语言中做同样的操作,但是它不起作用,我搞不懂为什么? class Numero { public: static int num; Numero() { cout<<num++<<" "; } }; int Numero::num=1; int main() { int n; cout<<"Type n: "; cin>>n; Numero obj[n]; return 0; }

C# 如何在C中打印n次n而不使用循环、递归或goto# 我在C++中有这个代码,但是我想在C语言中做同样的操作,但是它不起作用,我搞不懂为什么? class Numero { public: static int num; Numero() { cout<<num++<<" "; } }; int Numero::num=1; int main() { int n; cout<<"Type n: "; cin>>n; Numero obj[n]; return 0; },c#,c++,constructor,C#,C++,Constructor,我尝试了不同的方法,但我唯一得到的是: 你知道如何让它工作吗?为什么在创建类的命名空间时,它并没有调用数字编译器??< /p> < p>,因为C++分配了 n>代码>堆栈上的许多代码元素 No.,这导致编译器调用 Nodo-构造函数>代码> n>代码>倍。最终,您的程序仍在使用循环,但它隐藏在生成的机器代码中,而不是显式地隐藏在代码中 编译器生成的机器代码的伪代码类似于: numbers = Allocate( n * sizeof( Number ) ); for(int i=0;i<

我尝试了不同的方法,但我唯一得到的是:


你知道如何让它工作吗?为什么在创建类的命名空间时,它并没有调用数字编译器??< /p> < p>,因为C++分配了<代码> n>代码>堆栈上的许多代码元素<代码> No.<代码>,这导致编译器调用<代码> Nodo-构造函数>代码> n>代码>倍。最终,您的程序仍在使用循环,但它隐藏在生成的机器代码中,而不是显式地隐藏在代码中

编译器生成的机器代码的伪代码类似于:

 numbers = Allocate( n * sizeof( Number ) );
 for(int i=0;i<n;i++) numbers[i].ctor();
Number=分配(n*sizeof(Number));

对于(int i=0;i C++版本是因为您分配了代码> n< /代码>堆栈中的许多代码元素<代码>数字< /代码>,这导致编译器调用<代码> Nodo-构造函数>代码> n>代码>倍。最终,您的程序仍然使用循环,但它隐藏在生成的机器代码中,而不是显式删除。你的密码

编译器生成的机器代码的伪代码类似于:

 numbers = Allocate( n * sizeof( Number ) );
 for(int i=0;i<n;i++) numbers[i].ctor();
Number=分配(n*sizeof(Number));

对于(int i=0;In c),与C++不同,一个数组的代码> t[] ]/COD>不会自动调用每个T项的/A默认构造函数-相反,当T是引用类型时,字段将被初始化为 null >代码>(因此,C++方法,这主要是依赖于副作用的黑客行为在C ^:不起作用):@ USER 826740:令人着迷!谢谢。你可以在LINQ中隐藏迭代,显然像<代码>枚举。范围(1,n)。在C++中选择(i={控制台。< />代码>自动地调用每个T项的/A默认构造函数-而不是当T是引用类型时,字段将被初始化为 null >代码>(因此,C++方法,这主要是依赖于副作用的黑客行为在C ^:不起作用):@user2864740:太棒了!谢谢你。你可以在LINQ中隐藏迭代,很明显就像
Enumerable.Range(1,n)。选择(i=>{Console.WriteLine(i);return i;})
 numbers = Allocate( n * sizeof( Number ) );
 for(int i=0;i<n;i++) numbers[i].ctor();