Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将3D数组作为参数C传递时丢失一些值_C_Function_Multidimensional Array_Declaration_Variable Length Array - Fatal编程技术网

将3D数组作为参数C传递时丢失一些值

将3D数组作为参数C传递时丢失一些值,c,function,multidimensional-array,declaration,variable-length-array,C,Function,Multidimensional Array,Declaration,Variable Length Array,我正在编写一个程序,将3d数组作为参数传递给函数remove\u red(),但在第二行之后,数组中的值被一些随机数覆盖。代码如下: void remove_red(int image[100][100][3], int row_num, int col_num) { printf("You are now in remove_red function\n"); for(int i = 0; i < row_num; i++){ for (int j =

我正在编写一个程序,将3d数组作为参数传递给函数
remove\u red()
,但在第二行之后,数组中的值被一些随机数覆盖。代码如下:

void remove_red(int image[100][100][3], int row_num, int col_num)
{

    printf("You are now in remove_red function\n");
    for(int i = 0; i < row_num; i++){
        for (int j = 0; j < col_num; j++) {
            for (int k = 0; k < 3; k++) {
                printf("%d    ", image[i][j][k]);
            }
            printf("\n");
        }
    }

}

int main(int argc, char *argv[]) {

        int option;
        scanf("%d", &option);
        if(option == 1 || option == 2 || option == 3){
            char type[3];
            int col_num, row_num, contrast;
            scanf("%s %d %d %d", type, &row_num, &col_num, &contrast);
            printf("Type: %s, columns: %d, rows: %d, contrast: %d, option: %d\n", type, col_num, row_num, contrast, option);
            int image[row_num][col_num][3];
            int pixel;

            for(int i = 0; i < row_num; i++){
                for (int j = 0; j < col_num; j++) {
                    for (int k = 0; k < 3; k++) {
                        scanf("%d", &pixel);
                        printf("%d ", pixel);
                        image[i][j][k] = pixel;
                        printf("The added number is %d ", image[i][j][k]);
                    }
                    printf("\n");
                }
            }
            printf("Type: %s, columns: %d, rows: %d, contrast: %d, option: %d\n", type, col_num, row_num, contrast, option);

            if(option == 1){
                printf("You chose option %d!\n", option);

       //The image 3d array has all values in this part of the code
                remove_red(image, row_num, col_num);

            }else if(option == 2){
                printf("You chose option %d!\n", option);
                convert_to_black_and_white(image);

            }else if(option == 3) {
                printf("You chose option %d!\n", option);
                instagram_square(image);
            }
        }else{
            printf("Error: Expecting one command-line argument, which needs to be either 1, 2, or 3.");
            return 0;
        }
        return 0;
}


void remove_red(int image[100][100][3],int row_num,int col_num)
{
printf(“您现在处于删除红色函数\n”);
对于(int i=0;i
remove\u red()
中时,我打印得到的数组:

1233
1380275029 1480938591 1313169236 1229213507 809322318 893792632
而不是

1   2    2    3    2     3
2 3 4 5


有人知道为什么会这样吗?提前感谢您的帮助。

函数参数声明不正确。您正在向函数传递一个可变长度数组,但将相应的参数声明为具有固定大小的数组

将函数声明为

void remove_red( int row_num, int col_num, int image[][col_num][3] );
对于数组的维度,最好使用size\u t类型,而不是int类型

这是一个演示程序

#include <stdio.h>

void f( size_t m, size_t n, int a[][n][3] )
{
    for ( size_t i = 0; i < m; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            for ( size_t k = 0; k < 3; k++ )
            {
                printf( "%2d ", a[i][j][k] );
            }
            putchar( '\n' );
        }
        putchar( '\n' );
    }
}

int main(void) 
{
    size_t m = 2, n = 5;
    int a[m][n][3];

    for ( size_t i = 0; i < m; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            for ( size_t k = 0; k < 3; k++ )
            {
                a[i][j][k] = i * n * 3 + 3 * j + k;
            }
        }
    }

    f( m, n, a );

    return 0;
}

函数参数的声明不正确。您正在向函数传递一个可变长度数组,但将相应的参数声明为具有固定大小的数组

将函数声明为

void remove_red( int row_num, int col_num, int image[][col_num][3] );
对于数组的维度,最好使用size\u t类型,而不是int类型

这是一个演示程序

#include <stdio.h>

void f( size_t m, size_t n, int a[][n][3] )
{
    for ( size_t i = 0; i < m; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            for ( size_t k = 0; k < 3; k++ )
            {
                printf( "%2d ", a[i][j][k] );
            }
            putchar( '\n' );
        }
        putchar( '\n' );
    }
}

int main(void) 
{
    size_t m = 2, n = 5;
    int a[m][n][3];

    for ( size_t i = 0; i < m; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            for ( size_t k = 0; k < 3; k++ )
            {
                a[i][j][k] = i * n * 3 + 3 * j + k;
            }
        }
    }

    f( m, n, a );

    return 0;
}

你拿什么作为输入?你拿什么作为输入?