繁体   English   中英

如何将一维和二维数组参数传递给c中的函数

[英]how to pass 1D and 2D array arguments to a function in c

假设我有一个函数int function(int N, int c[N]){...} ,将一个整数和一个数组作为参数。 假设现在我有一个大小为'N N 2的双精度数组**c ,并且想将函数function应用于双箭头的一列c[i][0]i从到N-1不等。 我应该如何使用此功能。 它看起来像function(N,*c[0])吗?

有人可以帮忙吗?

在c语言中,对于单维数组,在将数组传递给该函数时,无需在函数参数中提及数组的大小。

如果是单个二维数组

...
int a[10];
func(10, a);
...
void func(int size, int x[]) //no need to mention like int x[10]
{
    //here x is not an array. Its equivalent to int *
    printf("%d", sizeof(x)); // this will print 4 or 8 not 40
}

如果是二维数组

...
int a[10][5];
func (10, a);
...

void (int rows, int x[][5])   //here int x[][] is invalid
{

}

将C中的数组传递给函数时,它始终会衰减为其第一个元素的指针。 在某些情况下知道这一点很高兴。

例如,您可以编写

int list[10];
func (int *x) {
    int i;
    for (i = 0; i < 10; i++) {
         printf("%d", x[i]);
    }
 }

x [i]实际上只是语法糖。 在C语言中,当您使用方括号表示法访问数组的元素时,它将转换为*(x + i),其中x是数组的名称。

这是由于指针算法而起作用的。 如果x是10个整数的数组的名称,则表达式中x的值是该数组第一个整数的地址。

x + i将始终指向x之后的第i个元素(C考虑到存储在数组中的元素类型的大小,并相应地增加指针)。

因此,当传递2d数组时,该数组会衰减为其第一个元素的指针-这是一个数组。

带有2d数组的函数签名可以写成

func(int x[][columns] {
      ...
} 
// but could also be written as

func(int (*x)[columns]) {
    ...
}

表示x是指向整数数组的指针。

有时您需要编写一个函数来接受二维数组,该数组的宽度直到运行时才知道。 在这种情况下,您可以将指针传递到[0] [0]元素,也可以传递两个维度,然后使用指针算术获得正确的元素。 例如,

print_2d_array (int *x, height, width) {
    int i, j;
       for (i = 0; i < height; i++) {
         for (j = 0; j < width; j++) {
            printf("%d", x[i * width + j]);
         }
     }
}

int list[10][10];
print_2d_array (&list[0][0], 10, 10);

适用于动态分配的2d数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM