Thắc mắc về cấp phát động mảng một chiều trong hàm?

Như tiêu đề thì em có đoạn code như sau:

#include <stdio.h>
#include <stdlib.h>
void CapPhat(int **a,int *n)
{
	*a = (int *)malloc((*n)*sizeof(int));
}
int main()
{

	int *a, n;
	printf("\nban muon nhap bao nhieu phan tu : ");
	scanf_s("%d", &n);
	CapPhat(&a, &n);
	free(a);

	
	printf("\n\n");
	system("pause");
	return 0;
}

Mọi người cho em hỏi dòng này tại sao không phải là:

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

Mà lại là:

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

Em cảm ơn.

Vì trong tham số truyền vào, bạn đã đẩy con trỏ a lên 1 cấp, nên trong hàm đó mỗi khi gọi a phải để thêm 1 dấu * ở trước nữa, trong trường hợp phức tạp có nhiều toán tử thì ghi : (*a)...

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