01/10/2018, 10:51

Hỏi về nhập mảng bằng con trỏ số phần tử nhập trong hàm

các bạn xem cho em phần khai báo hàm với phần nhập bằng lệnh scanf mấy cái đối số sao lạ vậy ạ?
void nhapContro(int *(*a), int *n)
scanf("%d", (*a + i))

#include <stdio.h>
#include <stdlib.h>
  
void nhapContro(int *(*a), int *n) {
    int i;
 
    printf("Nhap so phan tu cua mang: ");
    scanf("%d", n); // khong phai &n
    *a = (int *) malloc ((*n) * sizeof(int));
    // *a : lay dia chi cua mang a chu khong phai gia tri cua a
     
    for (i = 0; i < *n; i++) {
        printf("Nhap a[%d] = ", i);
        scanf("%d", (*a + i));
    }
}
  
void xuatMang(int *a, int n) {
    int i;
    for (i = 0; i < n; i++) {
        printf ("%d 	", a[i]);
    }
}
  
int main() {
    int *a, n;
     
    nhapContro(&a, &n); // lay dia chi cua a va n
    xuatMang(a, n);
      
    return 0;
}
Trọng Dũng viết 13:05 ngày 01/10/2018

Thứ nhất, int *n là truyền tham trỏ, giá trị của n sẽ thay đổi sau khi ra khỏi hàm. và scanf vẫn cần từ khóa &.
Thứ 2, truyền con trỏ vào hàm, không cần *(*a).
Thứ 3, scanf("%d", (a+i) ) a là con trỏ, a+i cho bạn trỏ tới ô nhớ bên cạnh, nó là địa chỉ nên không cần toán tử &.

Bài liên quan
0