Khi nào sử dụng truyền ₫ịa chỉ?. Khi cần thay ₫ổi "biến ₫ầu vào" truy nhập trực tiếp vào ô nhớ, không qua bản sao Khi kích cỡ kiểu dữ liệu lớn => tránh sao chép dữ liệu vào ngăn xếp
Trang 13.3.2 Truyền ₫ịa chỉ
int SumInt(int* p, int N);
// Function call
void main() {
int a[] = {1, 2, 3, 4};
int k = SumInt(a,4);
}
// Function definition
int SumInt(int* p, int N) {
int *p2 = p + N, k = 0;
while (p < p2)
k += *p++;
return k;
SP
a[0]=1 a[1]=2 a[2]=3 a[3]=4
00A0
k p=00A0 N=4 k SP
k = 45
k = 45
Trang 2Truyền mảng tham số?
int SumInt(int p[4], int N);
// Function call
void main() {
int a[] = {1, 2, 3, 4};
int k = SumInt(a,4);
}
// Function definition
int SumInt(int p[4], int N) {
int *p2 = p + N, k = 0;
while (p < p2)
k += *p++;
return k;
Bản chất như trong ví dụ trước:
Truyền ₫ịa chỉ!
Trang 3Thử lại ví dụ ₫ọc từ bàn phím
#include <iostream.h>
void ReadInt(const char* userPrompt, int* pN) {
cout << userPrompt;
cin >> *pN;
}
void main() {
int x = 5;
ReadInt("Input an integer number:", &x);
cout << "Now x is " << x;
}
Kết quả: x thay ₫ổi giá trị sau ₫ó (cũng là lý do tại sao hàm
scanf() lại yêu cầu kiểu tham biến là con trỏ!)
Trang 4Khi nào sử dụng truyền ₫ịa chỉ?
Khi cần thay ₫ổi "biến ₫ầu vào" (truy nhập trực tiếp vào ô nhớ, không qua bản sao)
Khi kích cỡ kiểu dữ liệu lớn => tránh sao chép dữ liệu vào ngăn xếp
Truyền tham số là một mảng => bắt buộc truyền ₫ịa chỉ
Lưu ý: Sử dụng con trỏ ₫ể truyền ₫ịa chỉ của vùng
nhớ dữ liệu ₫ầu vào Bản thân con trỏ có thể thay ₫ổi
₫ược trong hàm nhưng ₫ịa chỉ vùng nhớ không thay
₫ổi (nội dung của vùng nhớ ₫ó thay ₫ổi ₫ược): xem ví
dụ biến p trong hàm SumInt trang 21.
Trang 53.3.3 Truyền tham chiếu (C++)
#include <iostream.h>
void ReadInt(const char* userPrompt, int& N) {
cout << userPrompt;
cin >> N;
}
void main() {
int x = 5;
ReadInt("Input an integer number:", x);
cout << "Now x is " << x;
}
Kết quả: x thay ₫ổi giá trị sau ₫ó