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我不知道这一点。之后我做了一些挖掘