在二维数组中初始化n个整数

时间:2016-10-23 04:25:58

标签: c multidimensional-array

我很难理解如何初始化并向2维数组中的每个元素添加1到n个整数。

例如n = 5

arr[5][5] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };

我试过了

for (int i = 0; i < sizeof(arr); i++) { for (int j = 0; j < sizeof(arr[i]); j++) { product[i][j] += 1; } }

3 个答案:

答案 0 :(得分:2)

这应该给你一个起点:

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

#define LENGTH 5

int main(int argc, char** argv) {
    int arr[LENGTH][LENGTH] = { { 0 } };
    for (int i = 0; i < LENGTH; i++) {
        fprintf(stderr, "%p contains %d elements\n", (void *) arr[i], (int) sizeof(arr)/sizeof(*arr));
        for (int j = 0; j < LENGTH; j++) {
            arr[i][j]++;
            fprintf(stderr, "%d ", arr[i][j]);
        }
        fprintf(stderr, "\n");
    }
    return EXIT_SUCCESS;
}

请注意,您只能执行sizeof(foo)/sizeof(*foo)技巧,因为foo位于堆栈中。你不能通过指针动态分配内存来做到这一点。

答案 1 :(得分:1)

因此,如果我理解你的问题是正确的,那么你想在你的每个元素中添加1&fennt array arr[5][5] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} }

像这样:

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

#define ROWS 2
#define COLS 5

void print_array(int arr[][COLS], int nrows);

int
main(void) {
    int row, col;
    int arr[ROWS][COLS] = {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}};

    for (row = 0; row < ROWS; row++) {
        for (col = 0; col < COLS; col++) {
            arr[row][col] += 1;
        }
    }

    print_array(arr, ROWS);

    return 0;
}

void
print_array(int arr[][COLS], int nrows) {
    int row, col;

    for (row = 0; row < nrows; row++) {
        for (col = 0; col < COLS; col++) {
            printf("%d ", arr[row][col]);
        }
        printf("\n");
    }
}

或者,如果你真的想使用sizeof(),你可以这样做:

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

#define ROWS 2
#define COLS 5

int
main(void) {
    int row, col;
    int arr[ROWS][COLS] = {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}};
    int row_size, col_size;

    row_size = sizeof(arr)/sizeof(*arr);
    col_size = sizeof(*arr)/sizeof(**arr);

    for (row = 0; row < row_size; row++) {
        for (col = 0; col < col_size; col++) {
            arr[row][col] += 1;
        }
    }

    for (row = 0; row < row_size; row++) {
        for (col = 0; col < col_size; col++) {
            printf("%d ", arr[row][col]);
        }
        printf("\n");
    }

    return 0;
}

答案 2 :(得分:1)

您在for循环中使用了错误的条件 sizeof(arr)给出5(行)* 5(col)* 4(整数)= 100;

因此,你的for循环会导致未定义的行为 sizeof(arr [0])给出5 * 4 = 20;

你必须使用

rows_count=size(arr)/sizeof(arr[0]);
col_count=sizeof(arr[0])/sizeof(arr[0][0]);

这是代码

#include<stdio.h>
void main()
{
    int i,j;
    int arr[5][5]={{1,2,3,4,5},{1,2,3,4,5}};
    printf("Sizeof(arr) : %d\n",sizeof(arr));
    printf("Sizeof(arr[0]) : %d\n",sizeof(arr[0]));
    for (int i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) 
    {
        for (int j=0;j<(sizeof(arr[0])/sizeof(arr[0][0]));j++) 
            arr[i][j] += 1;
    }
    for (int i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) 
    {
        for (int j=0;j<(sizeof(arr[i])/sizeof(arr[0][0]));j++) 
            printf("%d ",arr[i][j]);
        printf("\n");
    }
        printf("\n");

}