Mảng (array) trong C (phần 3)

Để tìm hiểu chi tiết về truyền toàn bộ mảng trong hàm và vòng lặp For - each trong C++ là gì, bạn đọc cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn.

Mục Lục bài viết:
1. Truyền toàn bộ mảng trong hàm
2. Vòng lặp For, each

 

1. Truyền toàn bộ mảng trong hàm

Trong C++, chúng ta có thể truyền một phần tử của mảng hoặc toàn bộ mảng để làm đối số cho hàm.

- Trước hết là truyền một phần tử của mảng cho một hàm:

#include
void display(int a)
{
std::cout < a=""><>
}
int main(){
int n[ ] = { 20, 30, 23, 4, 5, 2, 41, 8 };
display(n[2]);
trả về 0;
}

Kết quả đầu ra có dạng: 23.

- Truyền toàn bộ mảng cho hàm:

Ngoài ra chúng ta cũng có thể truyền toàn bộ mảng cho hàm bằng cách trueyefn tên mảng làm đối số. Tức là chúng ta sẽ truyền địa chỉ của mảng, là địa chỉ của phần tử đầu tiên của mảng. Bằng cách trỏ phần tử đầu tiên, chúng ta có thể lấy toàn bộ mảng.

Để dễ hình dung, bạn đọc cùng tham khảo ví dụ dưới đây:

#include
float trùng bình (float a[])
{
int i;
float avg, sum=0;
for(i=0;i<>
{
sum+= a[i];
}
avg = sum/8;
trả về avg;
}
int main(){
float b, n[ ] = { 20.6, 30.8, 5.1, 67.2, 23, 2.9, 4, 8 };
b = trung bình(n);
std:: cout < "trung="" bình="" các="" số=" << b << std::endl;
trả về 0;
}

Kết quả trả về có dạng:

Trung bình các số = 20.2

Trung bình(float a[]): là hàm lấy mảng float. Phần còn lại của phần thân hàm được thực thi.

b = trung bình(n): n được truyền. 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ụ trên chúng ta tính trung bình các giá trị của các phần tử trong một mảng, trong đó kích thước của mảng đã biết, 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 trung bình(float a[],int size)
{
int i;
float avg, sum=0;
for(i=0;i
{
sum+= a[i];
}
avg = sum/size;
trả về avg;
}
int main(){
sử dụng namespace std;
int size,j;
cout << " nhập="" kích="" thước="" của="" mảng"=""><>
cin >> size;
float b, n[size];
for(j=0; j
{
cout < "giá="" trị="" của="" n["="">< j="">< "]="" :="" "=""><>
cin >> n[j];
}
b = trung bình (n, size);
cout < "trung="" bình="" các="" số=" << b << endl;
trả về 0;
}
Đầu ra:
Nhập kích thước của mảng
4
Giá trị của n[0] :
47
Giá trị của n[1] :
74
Giá trị của n[2] :
45
Giá trị của n[3] :
56
Trung bình các số = 55.5

Đoạn mã trên tương tự như các đoạn mã trong các ví dụ trước, chỉ khác chúng ta đã truyền kích thước của mảng theo kiểu tường mình - float trung bình (float a [], int size).

Hoặc ngoài ra 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ỏ. Cùng tham khảo ví dụ dưới đây:

#include
Sử dụng namespace std;
void display(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 };
display(n);
trả về 0;
}
Đầu ra 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ụ trên, đị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 display(int *p): tức là hàm display đang lấy 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 con trỏ cho 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 display.

Vì p là địa chỉ của mảng n[] trong hàm display, 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 cho 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. 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. Vòng lặp 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.

2. Vòng lặp For,  each

Dạng vòng lặp for mới giúp việc lặp các mảng dễ dàng hơn, được gọi là vòng lặp for - each. Vòng lặp này được sử dụng để lặp qua một mảng.

Dưới đây là 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 nó. Vì vậy, 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ứ 2, tức là 2, ... . Chỉ cần tập trung vào cú pháp của vòng lặp này, phần còn lại rất dễ dàng.

Như vậy trong bài viết mảng (array) trong C++ (phần 3) trên đây Taimienphi.vn vừa giới thiệu cho bạn về vòng lặp For - each và truyền toàn bộ mảng trong hàm trong C++. Trong bài viết mảng (array) trong C++ (phần 4) tiếp theo Taimienphi.vn sẽ giới thiệu tiếp cho bạn về mảng 2D trong C++ là gì, các bạn hãy đón đọc bài viết về mảng trong C phần 4 để có thêm những kiến thức về lập trình C.

Trong bài học C++ về mảng (array) trong C++ (phần 1 và 2) Taimienphi.vn đã giới thiệu cho bạn về khởi tạo mảng và khai báo mảng trong C++ là gì. Trong bài C++ hôm nay, Taimienphi.vn sẽ giới thiệu tiếp cho bạn về con trỏ tới mảng trong C++.
Bloodshed Dev C++ - Hướng dẫn thực thi, biên dịch
Input và Output trong C
Cấu trúc dữ liệu trong C
Con trỏ (pointer) trong C
Mảng (array) trong C (phần 2)
Date và Time trong C

ĐỌC NHIỀU