Search…

Sử Dụng Mảng Trong C++

06/09/20204 min read
Tìm hiểu những kiến thức cơ bản về mảng dữ liệu và cách sử dụng mảng trong C++.

Giới thiệu

Mảng dữ liệu là một tập hợp các phần tử có cùng kiểu dữ liệu và được truy cập thông qua index. Việc vận dụng mảng dữ liệu trong việc học tập và làm việc là điều không thể thiếu đối với mỗi lập trình viên. Bài viết này sẽ cung cấp cho những kiến thức cơ bản về mảng dữ liệu trong ngôn ngữ C++.

Đặt vấn đề

Khi cần lưu trữ một số lượng lớn các phần tử có cùng kiểu dữ liệu, chẳng hạn như cần lưu trữ 30 số nguyên được nhập từ bàn phím, có thể dùng 30 biến số nguyên riêng biệt để lưu trữ. Tuy nhiên, cách trên có một số nhược điểm như sau:

  • Có quá nhiều biến cần khởi tạo. Để nhớ được hết các biến này là không đơn giản, đồng thời gây khó khăn cho việc quản lý các biến.
  • Phải thực hiện thủ công các thao tác với biến đó. Do các biến là độc lập nên không thể sử dụng các cấu trúc lặp để thao tác với nó.
  • Chương trình sẽ dài và việc nâng cấp cũng trở nên khó khăn.

Do đó, việc nhóm các phần tử đó lại với một cái tên duy nhất sẽ khắc phục được những nhược điểm trên. Các phần tử vẫn hoạt động độc lập, nhưng dưới một tên duy nhất, cùng với chỉ số (index) của nó để phân biệt với các phần tử khác.

Khai báo và sử dụng mảng

Cú pháp khai báo mảng như sau: <kiểu dữ liệu><tên mảng>[<số lượng phần tử>];

Kiểu dữ liệu của mảng sẽ quy định kiểu dữ liệu của các phần tử có trong mảng. Tên mảng được đặt tên theo quy tắc đặt tên biến trong C/C++. Khi đó, hệ thống sẽ tìm một vùng nhớ liên tiếp phù hợp để cấp phát cho biến mảng. Lưu ý, số lượng phần tử phải là 1 HẰNG SỐ.

Index phần tử đầu tiên là 0. Nên khai báo mảng n phần tử thì index của phần tử cuối cùng là n – 1. Điều này cũng đúng cho rất nhiều ngôn ngữ lập trình thông dụng hiện nay.

Ngoài cách khai báo trên, C++ còn cho phép lập trình viên khai báo không tường minh, khai báo và khởi tạo giá trị ban đầu cho các phần tử.

int main()
{
	int a[10];				// Explicity Declare

	for(int i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}

	for(int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}

	printf("\n");

	int b[10] = {7, 4, 1, 1};		// Declare and set value

	for(int i = 0; i < 10; i++)
	{
		printf("%d ", *(b + i));	// Addition with pointer
	}

	printf("\n");

	char str [] = "Welcome to STDIO";	//Implicity Declare
	printf("%d", strlen(str));

	return 0;
}

Mảng nhiều chiều

Khi mỗi phần tử của mảng có kiểu dữ liệu là một mảng khác thì được mảng 2 chiều. Khi đó, ngoài index của các phần tử trong mảng, mỗi phần tử trong các phần tử đó cũng có index của nó. Do đó để truy xuất đến từng phần tử nhỏ, sử dụng cả 2 chỉ số index để chỉ ra vị trí của nó trong mảng 2 chiều.

Xem ví dụ sau để nắm được cách khai báo và sử dụng mảng 2 chiều.

#include <stdio.h>
#include <string.h>

int main()
{
	int a[3][3];
	for(int i = 0; i < 3; i++)
	{
		for(int j = 0; j < 3; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	for(int i = 0; i < 3; i++)
	{
		for(int j = 0; j < 3; j++)
		{
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}

	int b[3][3] = {{1, 3}, {2, 4, 6}};
	for(int i = 0; i < 3; i++)
	{
		for(int j = 0; j < 3; j++)
		{
			printf("%d ", b[i][j]);
		}
		printf("\n");
	}

	return 0;
}

Truyền tham chiếu mảng vào hàm

Khi cần chia nhỏ chương trình, cần đưa các đoạn công việc ra từng hàm riêng biệt. Khi các hàm cần thao tác với những mảng đã được khởi tạo, truyền mảng dữ liệu đó như một tham số đầu vào của hàm. Cách thao tác được trình bày trong ví dụ dưới đây:

void Function1(int a[])	
{
	// Your code
}

void Function2(int a[][10])	//First index is not necessary
{
	// Your code
}

Đối với mảng động được cấp phát cho con trỏ, thao tác như sau:

void Function3(int *&a, int n)
{
	// Your code
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024