C之变长数组

  变长数组是C99标准新加入的一个特性,它的加入大大方便了我们的编程,所谓变长数组,不是数组的长度可变,而是指允许使用变量来定义数组。这可以使我们写出更具通用性的函数。下面是一个例子,函数sum2d完成将一个二位数组中的所有数值相加并返回其和。

  #include<stdio.h>
  #define SIZE 10
  #define LOC 2
  #define ROW 4int sum2d(int loc, int row, int num[loc][row]);

  int main(void){

          int result2d;
          int num2d[LOC][ROW] = {{12, 24, 31, 66}, {12, 43, 77, 49}};

          result2d = sum2d(LOC, ROW, num2d);
          printf("The sum of the array sum2d is %d.\n", result2d);
          return 0;
  }

  int sum2d(int loc, int row, int num[loc][row]){
          int answer = 0;
          int i, j;
          for(i = 0; i < loc; i ++)
                  for(j = 0; j < row; j ++)

                          answer += num[i][j];
          return answer;
  }
      

在函数的声明部分,我们使用了扁长数组,使得此程序可以处理行列数不同的二维数组。但此处要注意的是这三个参数的顺序,必须是行,列在前,然后才是数组变量。即一定是:

int sum2d(int loc, int row, int num[loc][row]);

而不能是:

int sum2d(int num[loc][row], int loc, int row);

虽然这有可能编译通过,但绝对不建议使用这种方式。当然在声明部分,loc,row,num等形式参量名称可以省略。但此时[]中要加上‘*‘,即可以简写为:

int sum2d(int , int , int [*][*]);

不加‘*‘是错误的。

时间: 2024-10-02 10:22:29

C之变长数组的相关文章

变长数组_相乘取结果

//变长数组 相乘取结果 #include <stdio.h> int main(void){ // int array_01[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; int array_02[4][3] = {12,11,10,9,8,7,6,5,4,3,2,1}; int result[3][3] = {0}; int i, j, k; for (i = 0; i < 3; i ++){ //遍历array_01数组元素 for (j = 0;j

C 语言变长数组 struct 中 char data[0] 的用法

1.结构体内存布局(padding) 为了让CPU能够更舒服地访问到变量,struct中的各成员变量的存储地址有一套对齐的机制.这个机制概括起来有两点:第一,每个成员变量的首地址,必须是它的类型的对齐值的整数倍,如果不满足,它与前一个成员变量之间要填充(padding)一些无意义的字节来满足:第二,整个struct的大小,必须是该struct中所有成员的类型中对齐值最大者的整数倍,如果不满足,在最后一个成员后面填充. The following typical alignments are va

C99新增内容之变长数组(VLA)

我们在使用多维数组是有一点,任何情况下只能省略第一维的长度.比如在函数中要传一个数组时,数组的行可以在函数调用时传递,当属数组的列却只能在能被预置在函数内部.看下面一个例子: #define COLS 4 int sum2d(int ar[][COLS],int rows) { int r; int c; int tot=0; for(r=0;r<rows;r++) for(c=0;c<COLS;c++) tot+=ar[r][c]; return tot; } 现在假设定义了如下数组: in

变长数组 - 转

http://ericwang.github.io/program/2010/02/10/c_Variable_length_arrays/ C中的Variable length arrays (变长数组) Variable length arrays 是C99的特性,而不是 C++98 的,关于c99标准的变长数组, 在标准的6.7.5.2 Array declarators里面有这样的说明: 2.Only ordinary identifiers (as defined in 6.2.3)

(变长数组)变量也可做特殊数组的长度

这个问题困扰我好久,终于完美区分: 看一个例子: main() { int n=10; int a[n]; scanf("%d",&a[2]); printf("%d",a[2]); system("pause"); } 以上例子中,n明显是一个整型的变量,虽然付了值,但是他仍然不可做为数组的大小,按理说是编译不通过的,但有些编译器,却让着个编译过了, 我们说:因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小. 若i

变长数组与函数参数

代码: #include <stdio.h> #include <stdlib.h> void setval(const size_t, const size_t, int arr[*][*]); void display(const size_t, const size_t, int arr[*][*]); int main(void) { const size_t ROWS = 5; const size_t COLS = 3; int arr[ROWS][COLS]; set

c语言,变长数组

C语言变长数组data[0][总结]: char data[0]用法总结:

C语言变长数组 struct中char data[0]的用法

版权声明:本文为博主原创文章,未经博主允许不得转载. [cpp] view plain copy print? 今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术.下面是我在网上找到的一篇讲解很清楚的文章. 在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nL

快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = "cc" 变长数组定义: val ab = new ArrayBuffer[String]() val ab1 = ArrayBuffer[String]() 定长数组增加元素: ab += "aa" ab += ("bb", "cc&q