Hỏi về giá trị của con trỏ trong mảng một chiều

Trong bài toán viết hàm trả về giá trị lớn nhất trong mảng một chiều có sử dụng con trỏ, mình viết như sau:

#include <iostream>
using namespace std;

int getMaxValue( int n, int *ptr) {
    int max=ptr[0];
    for (int i=0; i<n; i++) {
        if (ptr[i]>max) max=ptr[i];
    }
    return max;
}

int main() {
    int n;
    cin >> n;
    int arr[n];
    int *ptr=arr;
    for (int i=0; i<n; i++) {
        cin >> arr[i];
    }
    cout << getMaxValue(n, ptr) << endl;
    return 0;
}

Giá trị của ptr, arr, &arr hay &arr[0] đều là địa chỉ của phần tử đầu tiên trong mảng.
Mình muốn hỏi là ở chỗ truyền giá trị vào cho hàm
getMaxValue(n, X);
nếu để X là ptr hoặc arr hoặc &arr[0] đều chạy chương trình được, nhưng để X là &arr thì báo lỗi “No matching function”, vì sao vậy ạ?

  • &arr không phải địa chỉ của phần tử đầu tiên đâu cậu, nó là địa chỉ của cả mảng của cậu (pointer to whole array). arr mới là địa chỉ phần tử đầu tiên trong mảng.
  • Với chữ ký hàm getMaxValue(int, int*), argument thứ 2 phải là con trỏ, không phải pointer to whole array (int*[]) => cậu nhận được lỗi “no matching function” khi truyển int*[] vào argument thứ 2.
    Nếu cậu thay đổi signature thành getMaxValue(int, int*[]) hoặc getMaxValue(int, int**), sửa lại hàm đó sử dụng double pointer, thì cậu có thể truyển &arr vào được.

Hope it helps!

See also:

EDIT: Cảm ơn @Sherly1001 đã correct nhé!

6 Likes

oh, cảm ơn bạn nha.
Chúc buổi tối an lành

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