2016-10-23 73 views
-2

我很难理解如何初始化并将1整数加1到n整数到二维数组中的每个元素。在二维数组中初始化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; } }

+0

你能举个例子吗? – kkmonlee

+0

@AndrewLi这就是我最初尝试过的,但是'arr.length'在C中不存在。我尝试了'sizeof(arr)',但我无法获得正确的数组。 – kkmonlee

回答

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; 
} 

注意,你可以在因为foo在堆栈上,所以请做sizeof(foo)/sizeof(*foo)的诀窍。你不能通过指针动态分配内存。

+0

谢谢你的回应。但是,您的解决方案将打印“1 1 1 1 1”而不是“1 2 3 4 5”。我如何添加每个元素? – kkmonlee

+0

我试图不为你做你的工作,而是试着给你一个工作起点来解决问题。你可以考虑'j'的值,也许可以把这个值加到'arr [i] [j]',而不是做'arr [i] [j] ++'。通过循环工作并调查初始值和最终值。然后,您可以修改循环中的计算来为您完成。 –

+0

花了我一段时间,但我设法做到了,谢谢! – kkmonlee

1

所以如果我理解你的问题是正确的,你想添加1到你的每个元素是阵列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; 
} 
1

您正在使用for循环 的sizeof错误条件(ARR )给出5(行)* 5(列)* 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"); 

}