Thắc mắc về con trỏ và mảng 2 chiều

Mình chạy đoạn code sau thì kết quả a, &a, *a luôn luôn đều bằng nhau???
ai giải thích giúp với :neutral_face:

void main()
{
	char a[MAX][MAX];
	printf("%X\n",a);
	printf("%X\n",*a);
	printf("%X\n",&a);
	system("pause");
}

1 câu hỏi nữa là sự khác nhau giữa: int (*p)[10] và int *p[10] là gì ạ?

  1. *a và &a <=> a[0][0], a là con trỏ trỏ đến a[0][0] => in ra địa chỉ thì giống nhau hết.

  2. int (*p)[10] con trỏ trỏ đến 1 mảng int[10]. int *p[10] là mảng 10 con trỏ p

1 Like

“=>in ra địa chỉ thì giống nhau hết.”

Vậy mình phân biệt 3 cái này như thế nào ạ?
ví dụ như kiểu dữ liệu của a là gì?
kiểu dữ liệu của &a là gì?
kiểu dữ liệu của *a là gì?

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