相关文章推荐
阳刚的饭盒  ·  C++开源库 - ...·  4 天前    · 
阳刚的青蛙  ·  【错误记录】Windows ...·  2 天前    · 
酷酷的扁豆  ·  【错误记录】Windows ...·  2 天前    · 
严肃的黄瓜  ·  pyqt ...·  5 月前    · 
冷冷的四季豆  ·  ObjectAnimator ...·  9 月前    · 
爱跑步的松鼠  ·  Unresolved reference: ...·  1 年前    · 
  1. 一直深信,数组长度必须是一个编译时可确定的常数,最近才发现自己真的是out了,自己真的是老了。 C99标准已经支持变长数组,换言之,数组的长度可以在运行时确定,没有任何问题。但是有个问题,就是数组只能够声明,不能初始化,因为编译器并不知道数组的长度,无法初始化。     请看下面的例子:     第一个例子,表明数组长度可以直到运行时才确定。     第二个例子表明,运行时才能确定长度的数组,不能初始化。
    1. #include<stdio.h>
      int test_array()
          int a ;
              printf("please input the array's length \n");
          scanf("%d",&a);
          int b[a] ;
          printf("We can define a array with len we input\n");
          b[a-1] = 3;
          printf("the last element of array is %d\n",b[a-1]);
          return 0;
      int main()
          test_array();
          return 0;
      }
      int test_array()
          int a ;
          printf("please input the array's length \n");
          scanf("%d",&a);
          int b[a] = {0,};
          printf("We can define a array with len we input\n");
          b[a-1] = 3;
          printf("the last element of array is %d\n",b[a-1]);
          return 0;
      int main()
          test_array();
          return 0;
      }

      VC++编译均不通过,GCC编译器第一段程序通过,第二段不通过



2.int num = 5; arr[num]; 若使用arr[],则 需要 在后面对齐进行初始化,来指定长度,否则 编译 可以通过,但是默认只有一个单元,超过一个单元的长度,在后面程序的运行中有可能会被冲掉 int arr[] = {0};//定义了一个单元的数组,并不是不定长数组 最好不用使用arr[] = {0}来定义数组,定义数组之前应要指定长度 int arr[256] = {0}; int a[256]={0};并不是把 每个程序在执行 都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap)。C语言用一堆标准库函数malloc和free在自由存储区中分配存储空间,而 C++ 则用new和delete表达式实现相同的功能。 一、new和delete创建和释放动态数组:数组类型的变量有三个重要的限制: 数组长度 固定,在 编译 必须知道其长度,数组只在定义它的语句内存在。动态数组:长度固定, 编译 不必知道其长度,通常是运行 确定 ;一直存在,直到程序显示释放它。 1、动态数组的定义:数组变量通过指定类型、数据名和维数来定义。而动态分配数组 ,只需指定类型和数组长 arr[5]=10;//语法无误, 编译 报错:java.lang.ArrayIndexOutOfBoundsException System.out.println(arr[5]);//语法无误, 编译 报错:错误同上 //方法二:使用for循环动态赋值 //导入java.util.*;包 Scanner input=new Scanner(System.in); int [] arr=new int[5]; for(int i=0;i<arr.length;i++) System.out.println("请输入第"+(i+1)+"个值"); arr[i]=input.nextInt(); //方法三:声明 赋值 int [] arr=new int[]{23,45,56,67}; int [] arr1={23,45,56,67}; int [] arr2= new int[5]{23,45,56,67};//错误,此 不能给 确定 的长度 int [] arr=new int[]{23,45,56,67}; //方法一:使用for循环输出 for(int i=0;i<arr.length;i++) System.out.println(arr[i]); //方法二:使用foreach输出:此为JDK5.0 新特性 for(int item : arr) System.out.println(item); 常见算法: 1. 求一维数组中的最大[小]值 2. 求一维数组中的总和,平均值 3. 添加,删除,修改,搜索等 具体请参考本人FTP\\5.0S1\\JAVA\\数组完整操作范例。[重复让人如此崩溃!] (1)malloc 和 free 用于执行动态内存分配的释放 (2)malloc 所分配的是一块连续的内存 (3)malloc 以字节为单位,并且返回值不带任何的类型信息:void* malloc(size_t size); (4)free 用于将动态内存归还系统: 问:c/ c++ 在建立数组 能否以变量作为 数组长度 ?首先明确的表示:不能!!!c/ c++ 在数组初始化 数组的长度都必须是一个常数,不能是变量(但可以是常变量),这一点是毋庸置疑的。但是为什么提出这个问题呢,是因为在使用codeblocks和dev 发现, 数组长度 在初始化 用变量,不报错!代码为证:非但没有报错,在后面对其赋值也是正确且可行的(吓得我回去赶紧翻书),发现这其实是很多 编译 器的扩展,为方便... 在数组定义的 候,括号中定义 数组长度 使用的是整形变量,在dev c++ 和codeblocks上 编译 后,没有显示语法错误。但是在普通的oj提交平台上测试后显示语法错误。int n;int a[n];上面的代码原意是想创建一个动态数组,输入的n有多少,数组的长度就有多长。 2.字符串。String b[ ] = { };定义空字符串数组。String b[ ] = {"mike1","mike2" };定义一个初始有元素的字符串数组。 关键:求取 数组长度 。 void setup(){ Serial.begin(9600); int size }}数组的大小可以程序运行的 候才定义吗?不。在数组的定义中,数组的大小必须是 编译 可知的,不能是在程序运行 才可知的。例如,假设i是一个变量,你就不能用i去定义一个数组的大小:char array[i];有些语言支持这种定义,但C语言不支持。如果C语言支持这种定义,栈就会变得更复杂,调用函数的开销就会更大,而程序的运行速度就会明显变慢。如果数组的大小在 编译 是可知的,即使它是一个非常复杂的表达式...