在C中将动态分配的数组作为参数传递 [英] Passing dynamically allocated array as a parameter in C

查看:159
本文介绍了在C中将动态分配的数组作为参数传递的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以...我的主服务器上有一个动态分配的数组:

So... I have a dynamically allocated array on my main:

int main()
{
    int *array;
    int len;

    array = (int *) malloc(len * sizeof(int));
    ...
    return EXIT_SUCCESS;
}

我还想构建一个函数来对该动态分配的数组进行处理. 到目前为止,我的功能是:

I also wanna build a function that does something with this dynamically allocated array. So far my function is:

void myFunction(int array[], ...)
{
   array[position] = value;
}

如果我声明为:

void myFunction(int *array, ...);

我仍然可以这样做:

array[position] = value;

否则我将不得不做:

*array[position] = value;

...?

此外,如果我正在使用动态分配的矩阵,那是声明函数原型的正确方法:

Also, if I am working with a dynamically allocated matrix, which one is the correct way to declare the function prototype:

void myFunction(int matrix[][], ...);

void myFunction(int **matrix, ...);

...?

推荐答案

如果我声明为:

If I declare it as:

void myFunction(int *array, ...);

我仍然可以这样做:

array[position] = value;

是的-这是合法语法.

此外,如果我使用的是动态分配的矩阵,那么哪个 正确声明函数原型:

Also, if I am working with a dynamically allocated matrix, which one is correct to declare the function prototype:

void myFunction(int matrix[][], ...);

void myFunction(int **matrix, ...);

...?

如果要使用多个维度,则必须在函数声明中声明除第一个维度以外的所有维度的大小,如下所示:

If you're working with more than one dimension, you'll have to declare the size of all but the first dimension in the function declaration, like so:

void myFunction(int matrix[][100], ...);

此语法不会执行您认为的操作:

This syntax won't do what you think it does:

void myFunction(int **matrix, ...);
matrix[i][j] = ...

这将声明一个名为matrix的参数,该参数是一个指向int的指针.尝试使用matrix[i][j]取消引用可能会导致分段错误.

This declares a parameter named matrix that is a pointer to a pointer to int; attempting to dereference using matrix[i][j] will likely cause a segmentation fault.

这是在C中使用多维数组的众多困难之一.

This is one of the many difficulties of working with a multi-dimensional array in C.

以下是解决此主题的有用的SO问题: 定义矩阵并将其传递到C中的功能

Here is a helpful SO question addressing this topic: Define a matrix and pass it to a function in C

这篇关于在C中将动态分配的数组作为参数传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆