Con trỏ - Bài 6 : Hàm trả về địa chỉ của biến bộ nhớ (Phần 2)

-Kiểu tham chiếu (reference) của C++ thực chất được cài đặt bằng kỹ thuật con trỏ, nhưng cú pháp lập trình lại tương tự như biến thông thường.Dưới đây là hàm refMinAbs() cài đặt tương tự như 2 hàm indexMinAbs() và pointerMinAbs() ở bài trước và chỉ khác ở 2 chỗ: giá trị trả về và chỉ thị return.

float& refMinAbs(float a[], int n)
{
int i = 1, idx = 0;
while(i < n)
{
if(fabs(a[i]) < fabs(a[idx]))
{
idx = i;
}
i++;
}
return a[idx];
}
- Trong hàm main() của chương trình chạy thử, việc gọi hàm với chỉ thị float& refMin = refMinAbs(B, n) nhằm để refMin tham chiếu đến phần tử tìm được. Lưu ý dấu & trong float& là thực sự cần thiết vì nếu ta thay bằng lời gọi hàm không có dấu & như là float refMin = refMinAbs(B, n) thì chương trình vẫn chạy nhưng biến refMin được gán bằng giá trị của phần tử tìm được chứ không tham chiếu(xem như đồng nhất) với phần tử tìm được. Trong hàm main() thì cả ba địa chỉ &B[id], pMin, &refMin đều cùng 1 giá trị địa chỉ bộ nhớ.

int main()
{
float B[] = {-9, 12.7F, 2.3F, 11, -10, -3.6F};
int n = sizeof(B)/sizeof(B[0]);
int id = indexMinAbs(B, n);
float* pMin = pointerMinAbs(B, n);
float& refMin = refMinAbs(B, n);
printf("Values: %f %f %f\n", B[id], *pMin, refMin);
printf("Memory Adresses: 0x%x 0x%x 0x%x", &B[id], pMin, &refMin);

getch();
return 0;
}

Nhận xét