Con trỏ trong mảng

chào mọi người, em có một bài tập Cho mảng A, B gồm m ≤ 1000 phần tử nguyên |A[i]|, |B[i]| ≤ 100,000. Hãy tìm một vị trí i trên mảng A và một vị trí j trên mảng B sao cho |A[i] + B[j]| là nhỏ nhất.
code của em:

void timvitrisummin(int *a, int *b, int m, int n)
{
	int min = a[0] + b[0];
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
			if (a[i] + b[j] < min)
			{
				min = a[i] + b[j];
			}
	}
    for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
			if (a[i] + b[j] ==min)
			{
				printf("i=%d, j=%d", i+1, j+1);
			}
	}
}

ban đâu em để chỗ a[] và b[] ko có dấu * thì nó báo lỗi “Subscript requires array or pointer type.” nên em mới thêm * vào thì ctrinh lại chạy đc. Mn cho e hỏi tại sao ạ? Em cũng có nghe qua về con trỏ nhưng chưa học tới mong mn giúp đỡ.

Chỗ prototype ấy à?

Vì đơn giản a[i] chính là *(a+i). Vả lại [0], [1], … thì chỉ có nghĩa khi đi cùng với mảng hay con trỏ, hoặc là có hỗ trợ cái này.

Trong C thì nên dùng [] cho tham số mảng :smiley: vì con trỏ còn dùng để truyền tham biến.

1 Like

bạn chưa học con trỏ, vậy là bạn đang muốn học trước chương trình.
Về cơ bản khi truyền tham số mảng thì dùng a[], b[] hay *a, *b cũng tương tự nhau

dạ em cảm ơn anh :smiley:

em cảm ơn anh do em code ko để ý mất dấu [].

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?