01/10/2018, 14:45

Gán giá trị cho mảng 2D bằng con trỏ

#include <stdio.h>
#include <malloc.h>
#define N 100

int main()
{
	int **a, nRow, nCol;

	scanf("%d%d", &nRow, &nCol); //Nhap hang vs cot

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

	printf("

");
	for (int i = 0; i < nRow; i++)
	{
		a[i] = (int*)malloc(sizeof(int));
		for (int j = 0; j < nCol; j++)
		{
			scanf("%d", a + nCol*i + j); //Nhap phan tu
		}
	}
	printf("

");
	for (int i = 0; i < nRow; i++)
	{
		
		for (int j = 0; j < nCol; j++)
		{
			printf("%d ", a[i][j]); //In phan tu
		}
		printf("
");
	}

	free(a);
	return 0;
}

Em đang gặp 1 vấn đề ở chỗ scanf phần tử.
Lúc mà em thay scanf("%d", a + nCol*i + j); //Nhap phan tu bằng scanf("%d", &a[ i ][ j ]) , tương tự với printf thì nó lại chạy bình thườn.
Cách khắc phục là j v mn

Dark.Hades viết 17:00 ngày 01/10/2018

a + nCol*i + j

Phép này dùng cho mảng 1D fake 2D mà, bạn khai báo thành con trỏ 2D thì sao dùng đc?

Hello World viết 16:50 ngày 01/10/2018

v phải sửa ntn hả bn

Hello World viết 16:46 ngày 01/10/2018

Với lại mảng 1D fake 2D là sao hả bn ??

rogp10 viết 16:57 ngày 01/10/2018

VD a = malloc(25 * sizeof(int)) :v vậy ta trải a ra ntn:

0 1 2 3 4
5 6 7 8 9
0 1 2 3 4
5 6 7 8 9
0 1 2 3 4
Hello World viết 16:52 ngày 01/10/2018

Mn giải đáp cho mình vs

Bài liên quan
0