我很难理解如何初始化并将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; } }
我很难理解如何初始化并将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; } }
这应该给你一个起点:
#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)
的诀窍。你不能通过指针动态分配内存。
所以如果我理解你的问题是正确的,你想添加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;
}
您正在使用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");
}
你能举个例子吗? – kkmonlee
@AndrewLi这就是我最初尝试过的,但是'arr.length'在C中不存在。我尝试了'sizeof(arr)',但我无法获得正确的数组。 – kkmonlee