c - C语言中如何通过指针访问矩阵数组的元素?

标签 c arrays pointers matrix

我似乎找不到任何有关如何通过函数中的指针访问数组元素的信息,我尝试遵循多个答案,但它们似乎都不适合我。

接下来我的任务是:用 C 编写一个具有 m x n 维度的程序,其中元素从 0 到 9 随机生成。使用两个新函数计算偶数元素的总和并计算偶数元素的数量等于零。

#include <stdio.h>
#include <stdlib.h>

void SumEven(int *a, int n, int m, int *sum){

}

void EqualToZero(int *a, int n, int m, int *number){

}

int main()
{
    int** a;
    int m, n, l, i, j, r, sum;

    printf("Enter number of columns for matrix: ");
    scanf("%d", &m);

    printf("Enter number of rows for matrix: ");
    scanf("%d", &n);

    a = (int **) malloc(m*sizeof(int));

    for (l = 0 ; l < m ; l++){
        a[l] = (int **) malloc(n*sizeof(int));
    }

    time_t t;

    srand((unsigned)time(&t));

    printf("\n");
    printf("Your matrix is:\n");
    printf("\n");

    for(i = 0 ; i < m ; i++){
        for(j = 0 ; j < n ; j++){
            r = rand() % 10;
            a[i][j] = r;
            printf("%d ", r);
        }
        printf("\n");
    }

    printf("\n");

    SumEven(&a, n, m);

    return(0);
}

正如您在提供的代码中看到的,我将这些函数留空,因为我不知道如何将矩阵传递给它们并访问它们的元素,以便我能够打印结果。

此外,我的函数本身逻辑的伪代码是:

if(a[i][j] % 2 == 0)
     printf("%d ", a[i][j])

 if(a[i][j] == 0)
     printf("%d ", a[i][j])

此外,该函数的这些参数是在我的任务中预定义的,因此我必须遵循它们。

编辑:我也不知道是否使用 SumEven(&a, n, m); 将相同的矩阵传递给函数。我尝试输出矩阵的地址并使用 printf("%d", &a) 显示来自 main()SumEven() 函数。

最佳答案

This code may help. It does the following:

1. For an arbitrary array of integers, sum the elements of the array 
   - using a pointer to the SUM function

2. For an arbitrary array of integers, count the number of zero elements in
   the array - using a pointer to the COUNTZERO function


    #include <stdio.h>
    #include <stdlib.h>

    // sum the elements of the matrix
    void sum(int* arr, int rows, int cols, int* result)
    {
        int sum = 0;
        int i, j;
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {
                sum = sum + arr[i*cols + j];
            }
        }

        *result = sum;
    }

    // count the number of zero elements in the matrix
    void countZero(int* arr, int rows, int cols, int* result)
    {
        int count = 0;
        int i, j;
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {

                if (arr[i*cols + j] ==0) count = count + 1;
            }
        }
        *result = count;
    }


    // arbitrary initialisation of 2D array of ints (force last entry of the array to equal zero - for testing purposes)
    void init2D(int *arr, int rows, int cols) {

        int i, j;

        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {
                arr[i*cols + j] = 1;
            }
        }

        // use this to test the countZero function
        arr[(rows-1)*(cols-1)] = 0;

    }

    int main() {

        int *array;     // will hold a 2D array of integers
        int N = 10;     // arbitrary number of rows     
        int M = 5;      // arbitrary num cols

        // 2D array of integers expressed as one "contiguous row" of memory 
        // make sure your indexing is correct when referenceing the array for  (i,j)th element
        array = (int*)malloc(sizeof(int)*N*M);
        if (array != NULL) {
            init2D(array, N, M);
        }

        // the function pointer
        void(*general)(int*,int,int,int*);   

        // will contain the sum result
        int sumAll = 0;
        int* ptsumAll = &sumAll;

        // make the function pointer point to the sum function
        general = &sum;

        // sum the contents of the array
        general(array,N,M, ptsumAll);
        printf("sum of array elements: %d\n", *ptsumAll);

        // contains a count of the zero elements in the array
        int count =0;
        int* ptcount = &count;

        // make the function pointer point to the count function
        general = &countZero;

        // count the number of zero element in the array
        general(array, N, M,ptcount);
        printf("number of zeros: %d\n", *ptcount);

        free(array);

        return 0;
    }

一些引用资料: https://www.cs.swarthmore.edu/~newhall/unixhelp/C_arrays.html http://www.cprogramming.com/tutorial/function-pointers.html

关于c - C语言中如何通过指针访问矩阵数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227465/

相关文章:

c - C 结构中的灵活数组成员

c - 显示进度指示器

Jquery,将输入数据传递到数组

c++ - 返回从常量指针 vector 生成的指针的函数

c++ - 指针不会返回 char 类型的地址

c - 为什么此代码中会产生 6 个 # 标记?

c++ - GeoIP.h 的数据库是什么

ios - 在运行 App 时编辑单元格时更新数组

arrays - 包含 0 的 awk 数组打印为空白

代码中的 C 段错误(核心转储)错误