C 运行时数组初始化

C 运行时数组初始化,c,arrays,C,Arrays,#包括 内部主(空){ //你的密码在这里 INTA=2; int b=3; INTC; c=a+b; int-arr[c]; arr[5]=0; printf(“%d”,arr[5]); 返回0; } 输出为0 它是如何在运行时获取数组编号的?这是一项新功能吗?此功能(可变长度数组)已在中引入。但目前这仍然是一种依赖于编译器的行为。一些编译器(比如gcc)支持它。有些人(比如msvc)没有 顺便说一句,您的代码中的arr[5]超出范围。最后一个元素应该是arr[4]此功能(可变长度数组)已在

#包括
内部主(空){
//你的密码在这里
INTA=2;
int b=3;
INTC;
c=a+b;
int-arr[c];
arr[5]=0;
printf(“%d”,arr[5]);
返回0;
}
输出为0

它是如何在运行时获取数组编号的?这是一项新功能吗?

此功能(可变长度数组)已在中引入。但目前这仍然是一种依赖于编译器的行为。一些编译器(比如gcc)支持它。有些人(比如msvc)没有

顺便说一句,您的代码中的
arr[5]
超出范围。最后一个元素应该是
arr[4]

此功能(可变长度数组)已在中引入。但目前这仍然是一种依赖于编译器的行为。一些编译器(比如gcc)支持它。有些人(比如msvc)没有


顺便说一句,您的代码中的
arr[5]
超出范围。最后一个元素应该是
arr[4]

这是一个可变长度数组。它们是在1999年C标准修订版中引入的

遗憾的是,对它们的支持来得太慢,以至于2011年的修订版将它们作为可选功能(但它们仍然是标准化的)1

尽管看起来很酷,但他们有一个重要的警告。如果大小“太大”,它们会导致调用堆栈溢出。因此,在使用它们时需要小心



1一些编译器供应商对此持抵制态度,因此可以选择安抚他们。Microsoft就是一个完整的案例研究。

这是一个可变长度数组。它们是在1999年C标准修订版中引入的

遗憾的是,对它们的支持来得太慢,以至于2011年的修订版将它们作为可选功能(但它们仍然是标准化的)1

尽管看起来很酷,但他们有一个重要的警告。如果大小“太大”,它们会导致调用堆栈溢出。因此,在使用它们时需要小心


1一些编译器供应商对此持抵制态度,因此可以选择安抚他们。Microsoft就是一个完整的案例研究。

不要混淆(静态/固定内存分配)和(动态内存分配)的概念:)

让我澄清你的想法,兄弟

关于以下问题,

                           C supports two type of array. 
1.静态数组-在“编译时”分配内存

2.动态数组-在“运行时”分配内存

问题。如何确定数组是静态的还是动态的

答案。 数组声明语法:-

         int array_Name[size];     //size defines the size of block of memory for an array;
那么,说到这里-->

第1点。若在编译时为数组指定了大小,那个么这是一个“静态内存分配”。它也称为“固定大小内存分配”,因为大小永远不会改变这是C中数组的限制。

前。
int-arr[10]//10是静态定义的arr大小
int brr[]={1000,2,37,755,3}//大小等于初始化的值数。

第2点。若在编译时为数组指定大小,那个么这是一个动态内存分配。 它是由stdlib.h中定义的malloc()函数实现的

现在,是对代码的澄清:-

 #include <stdio.h>

    int main(void) {
        // your code goes here
        int a = 2;
        int b = 3;
        int c;
        c = a + b;             //c is calculated at run time
        int arr[c];           //Compilor awaiting for the value of c which is given at run time but,
        arr[5] = 0;           //here arr is allocated the size of 5 at static(compile) time which is never be change further whether it is compile time in next statements or run time.
        printf("%d",arr[5]);  
        return 0;
    }
#包括
内部主(空){
//你的密码在这里
INTA=2;
int b=3;
INTC;
c=a+b;//c在运行时计算
int arr[c];//编译器等待在运行时给定的c值,但是,
arr[5]=0;//在这里,arr在静态(编译)时被分配为5的大小,无论是在下一个语句中的编译时还是在运行时,它都不会被进一步更改。
printf(“%d”,arr[5]);
返回0;
}
因此,数组(大小为5)在arr[5]处保持值0。
而且,其他数组索引仍然显示垃圾值

希望您能对这个问题的解决方案感到满意:)

不要混淆(静态/固定内存分配)和(动态内存分配)的概念:)

让我澄清你的想法,兄弟

关于以下问题,

                           C supports two type of array. 
1.静态数组-在“编译时”分配内存

2.动态数组-在“运行时”分配内存

问题。如何确定数组是静态的还是动态的

答案。 数组声明语法:-

         int array_Name[size];     //size defines the size of block of memory for an array;
那么,说到这里-->

第1点。若在编译时为数组指定了大小,那个么这是一个“静态内存分配”。它也称为“固定大小内存分配”,因为大小永远不会改变这是C中数组的限制。

前。
int-arr[10]//10是静态定义的arr大小
int brr[]={1000,2,37,755,3}//大小等于初始化的值数。

第2点。若在编译时为数组指定大小,那个么这是一个动态内存分配。 它是由stdlib.h中定义的malloc()函数实现的

现在,是对代码的澄清:-

 #include <stdio.h>

    int main(void) {
        // your code goes here
        int a = 2;
        int b = 3;
        int c;
        c = a + b;             //c is calculated at run time
        int arr[c];           //Compilor awaiting for the value of c which is given at run time but,
        arr[5] = 0;           //here arr is allocated the size of 5 at static(compile) time which is never be change further whether it is compile time in next statements or run time.
        printf("%d",arr[5]);  
        return 0;
    }
#包括
内部主(空){
//你的密码在这里
INTA=2;
int b=3;
INTC;
c=a+b;//c在运行时计算
int arr[c];//编译器等待在运行时给定的c值,但是,
arr[5]=0;//在这里,arr在静态(编译)时被分配为5的大小,无论是在下一个语句中的编译时还是在运行时,它都不会被进一步更改。
printf(“%d”,arr[5]);
返回0;
}
因此,数组(大小为5)在arr[5]处保持值0。
而且,其他数组索引仍然显示垃圾值


希望您能对这个问题的解决方案感到满意:)

这是标准C。不是一个扩展(尽管它依赖于编译器,因为Microsoft在实现C99时非常慢)@StoryTeller我不知道这一点。之后我做了一些挖掘