我很难理解如何初始化并向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;
}
}
答案 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");
}