Để hiểu rõ hơn về cách truyền toàn bộ mảng trong hàm và vòng lặp For - each trong C++, mời bạn đọc tiếp bài viết dưới đây của Mytour.
1. Truyền toàn bộ mảng trong hàm
2. Vòng lặp For, each
1. Truyền mảng đầy đủ vào hàm
Trong C++, chúng ta có thể truyền một phần tử hoặc toàn bộ mảng làm đối số cho hàm.
- Đầu tiên là truyền một phần tử của mảng cho một hàm:
#include
void hienthi(int a)
{
std::cout << a << std::endl;
}
int main(){
int n[] = { 20, 30, 23, 4, 5, 2, 41, 8 };
hienthi(n[2]);
return 0;
}
Kết quả in ra sẽ là: 23.
- Chuyển mảng đầy đủ vào hàm:
Bên cạnh đó, ta cũng có thể chuyển toàn bộ mảng vào hàm bằng cách truyền tên của mảng làm đối số. Điều này tương đương với việc truyền địa chỉ của mảng, tức là địa chỉ của phần tử đầu tiên trong mảng. Bằng cách này, ta có thể truy cập toàn bộ mảng thông qua con trỏ tới phần tử đầu tiên của mảng.
Để dễ hiểu hơn, hãy tham khảo ví dụ sau:
#include
float trungBinh(float a[])
{
int i;
float trungBinh, tong=0;
for(i=0;i<8;i++)
{
tong+= a[i];
}
trungBinh = tong/8;
trả về trungBinh;
}
int main(){
float b, n[ ] = { 20.6, 30.8, 5.1, 67.2, 23, 2.9, 4, 8 };
b = trungBinh(n);
std:: cout < 'Trung bình các số = ' << b << std::endl;
trả về 0;
}
Kết quả trả về sẽ là:
Trung bình của các số là 20.2
trungBinh(float a[]): là hàm tính trung bình của mảng float. Phần còn lại của phần thân hàm được thực thi.
b = trungBình(n): Chúng ta truyền n vào hàm. Như đã đề cập trước đó, n là con trỏ tới phần tử đầu tiên hoặc con trỏ tới mảng n[]. Vì vậy, chúng ta truyền qua con trỏ.
Trong ví dụ này, chúng ta tính trung bình của các giá trị trong một mảng, trong đó kích thước của mảng đã biết trước là 8.
Giả sử chúng ta lấy kích thước của mảng từ người dùng. Trong trường hợp đó, kích thước của mảng không cố định. Ở đây, chúng ta cần truyền kích thước của mảng làm đối số thứ hai cho hàm.
#include
float trungBình(float a[], int size)
{
int i;
float trungBinh, tong = 0;
for(i=0;i
tong += a[i];
}
trungBinh = tong / size;
trả về trungBinh;
}
int main(){
sử dụng namespace std;
int size, j;
cout << 'Nhập kích thước của mảng:' << endl;
cin >> size;
float b, n[size];
for(j=0; j
cout < 'Giá trị của n[' << j << '] := ' << endl;
cin >> n[j];
}
b = trungBình(n, size);
cout < 'Trung bình các số = ' << b << endl;
trả về 0;
}
Đoạn mã trên giống như các ví dụ trước, chỉ khác là chúng ta đã truyền kích thước của mảng theo kiểu rõ ràng - float trung bình(float a[], int size).
Hoặc thậm chí chúng ta cũng có thể truyền mảng cho một hàm bằng cách sử dụng con trỏ. Dưới đây là ví dụ:
#include
Sử dụng namespace std;
void hiểnThị(int *p)
{
int i;
for(i=0;i<8;++i)
{
cout << ' n[' << i << '] = ' << *p << endl;
p++;
}
}
int main(){
int size, j;
int n[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
hiểnThị(n);
trả về 0;
}
Đầu ra sẽ có dạng:
n[0] = 1
n[1] = 2
n[2] = 3
n[3] = 4
n[4] = 5
n[5] = 6
n[6] = 7
n[7] = 8
Trong ví dụ này, địa chỉ của mảng, tức là địa chỉ của n[0], được truyền cho các tham số chính của hàm.
- void hiển thị(int *p): là hàm hiển thị đang nhận con trỏ của một số nguyên và không trả về bất kỳ giá trị nào.
Bây giờ chúng ta truyền một con trỏ đến một số nguyên, tức là con trỏ của mảng n[], trong đó n là theo yêu cầu của hàm hiển thị.
Vì p là địa chỉ của mảng n[] trong hàm hiển thị, tức là địa chỉ của phần tử đầu tiên của mảng (n[0]), vì vậy *p tương ứng với giá trị của n[0]. Trong vòng lặp for trong hàm, p++ tăng giá trị của p lên 1. Vì vậy, khi i = 0, giá trị của *p được in ra. Sau đó p++ tăng *p lên *(p + 1), vì vậy trong vòng lặp thứ hai, giá trị của *(p + 1), tức là n[1], được in ra. Quá trình này tiếp tục cho đến khi i = 7 khi giá trị của *(p + 7), tức là n[7], được in ra.
2. Vòng lặp For, mỗi phần tử
Dạng vòng lặp mới này giúp việc duyệt các mảng trở nên đơn giản hơn, được gọi là vòng lặp for - each. Vòng lặp này được dùng để duyệt qua một mảng.
Dưới đây là một ví dụ về vòng lặp for - each:
#include
int main()
{
Sử dụng namespace std;
int ar[] = { 1,2,3,4,5,6,7,8,9,10 };
for (int m : ar)
{
cout < m=''><>
}
Trả về 0;
}
Kết quả trả về:
1
2
3
4
5
6
7
8
9
10
Ở đây, biến m sẽ truy cập mọi phần tử của mảng ar và lấy giá trị của chúng. Vì thế, trong lần lặp đầu tiên, m là phần tử đầu tiên của mảng ar, tức là 1. Trong lần lặp thứ hai, m là phần tử thứ hai, tức là 2, ... . Chỉ cần chú ý đến cú pháp của vòng lặp này, phần còn lại rất dễ dàng.
Trong phần trước, Mytour đã giới thiệu về vòng lặp For - each và truyền toàn bộ mảng trong hàm trong C++. Trong phần tiếp theo, Mytour sẽ hướng dẫn về mảng 2D trong C++, mời các bạn theo dõi để có thêm kiến thức mới về lập trình C.
