Mảng (Array) trong C | Cách khai báo mảng trong C chi tiết

Trong bài viết này, bạn sẽ được tìm hiểu về cách làm việc với các mảng trong C (ngôn ngữ lập trình), cách khai báo, khởi tạo và truy cập vào từng phần tử của một mảng trong C thông qua các ví dụ.

mang trong c

1. Mảng trong C là gì?

Mảng trong C là một biến hoàn toàn có thể tàng trữ nhiều giá trị. Ví dụ, nếu muốn tàng trữ 100 số nguyên, bạn hoàn toàn có thể tạo một mảng để tàng trữ chúng .

int data[100];

1.1 Làm sao để khai báo mảng trong C?

dataType arrayName [ arraySize ] ;
Ví dụ ,
float mark [ 5 ] ;
Trong ví dụ này, tôi đã khai báo mảng mark của kiểu floating-point. Và kích cỡ của nó là 5. Có nghĩa là, nó hoàn toàn có thể chứa được 5 giá trị số thực .
Điều quan trọng nhất mà bạn cần chú ý quan tâm chính là bạn không hề đổi khác được kích cỡ và kiểu của một mảng sau khi đã khai báo xong .

1.2 Truy cập vào các phần tử của mảng

Bạn hoàn toàn có thể truy vấn vào những thành phần của mảng bằng những chỉ mục. Giả sử bạn đã khai báo mảng mark như trên. Phần tử tiên phong chính là mark [ 0 ], thành phần thứ 2 chính là mark [ 1 ], …
Cụ thể là :

  • Các mảng có số 0 được xem là chỉ mục đầu tiên. Ví dụ mark[0] là phần tử đầu tiên
  • Nếu kích thước của một mảng là n, để truy cập vào phần từ cuối cùng, thì bạn cần sử dụng n-1 chỉ mục. Trong ví dụ này, chính là mark[4]
  • Giả sử địa chỉ bắt đầu của mark[0] là 2120d. Sau đó, địa chỉ của mark[1] sẽ là 2124d. Tương tự, địa chỉ của mark[2] sẽ là 2128d,…

Lưu ý, size của một biến float là 4 byte .

1.3 Làm thế nào để khởi tạo một mảng trong C?

Bạn hoàn toàn có thể khởi tạo một mảng trong quy trình khai báo. Ví dụ ,
int mark [ 5 ] = { 19, 10, 8, 17, 9 } ;
Bạn hoàn toàn có thể khởi tạo một mảng như sau
int mark [ ] = { 19, 10, 8, 17, 9 } ;
Trong ví dụ này, tôi chưa chỉ định kích cỡ đơn cử. Tuy nhiên, trình biên dịch sẽ biết được size của mảng này là 5 vì tôi đang khởi tạo nó với 5 thành phần là
mark [ 0 ] is equal to 19
mark [ 1 ] is equal to 10
mark [ 2 ] is equal to 8
mark [ 3 ] is equal to 17
mark [ 4 ] is equal to 9

1.4 Thay đổi giá trị của các phần tử của mảng

int mark [ 5 ] = { 19, 10, 8, 17, 9 }
/ / make the value of the third element to – 1
mark [ 2 ] = – 1 ;
/ / make the value of the fifth element to 0
mark [ 4 ] = 0 ;

1.5 Đầu vào và đầu ra của các phần tử của mảng

Dưới đây là cách mà bạn hoàn toàn có thể lấy tài liệu mà người dùng nhập vào và tàng trữ nó trong một thành phần mảng .
/ / take input and store it in the 3 rd element
​ scanf ( “ % d ”, và mark [ 2 ] ) ;
/ / take input and store it in the ith element
scanf ( “ % d ”, và mark [ i-1 ] ) ;
Còn dưới đây là cách mà bạn hoàn toàn có thể in một thành phần riêng không liên quan gì đến nhau của một mảng .
/ / print the first element of the array
printf ( “ % d ”, mark [ 0 ] ) ;
/ / print the third element of the array
printf ( “ % d ”, mark [ 2 ] ) ;
/ / print ith element of the array
printf ( “ % d ”, mark [ i-1 ] ) ;

Ví dụ 1: Đầu vào và đầu ra của mảng

/ / Program to take 5 values from the user and store them in an array
/ / Print the elements stored in the array

#include

int main ( ) {
int values [ 5 ] ;
printf ( “ Enter 5 integers : “ ) ;
/ / taking input and storing it in an array
for ( int i = 0 ; i < 5 ; + + i ) { scanf ( “ % d ”, và values [ i ] ) ; } printf ( “ Displaying integers : “ ) ; / / printing elements of an array for ( int i = 0 ; i < 5 ; + + i ) { printf ( “ % d \ n ”, values [ i ] ) ; } return 0 ; } Đầu ra Enter 5 integers : 1 - 3 34 0 3 Displaying integers : 1 - 3 34 0 3 Trong ví dụ này, tôi đã sử dụng vòng lặp for để lấy 5 đầu vào do người dùng nhập và tàng trữ chúng trong cùng một mảng. Sau đó, tôi liên tục sử dụng một vòng lặp for khác, lúc này, những thành phần sẽ được hiển thị lên màn hình hiển thị .

Ví dụ 2: Tính trung bình cộng

/ / Program to find the average of n numbers using arrays

#include

int main ( )
{
int marks [ 10 ], i, n, sum = 0, average ;
printf ( “ Enter number of elements : “ ) ;
scanf ( “ % d ”, và n ) ;

for(i=0; i
{
printf ( “ Enter number % d : “, i + 1 ) ;
scanf ( “ % d ”, và marks [ i ] ) ;
/ / adding integers entered by the user to the sum variable
sum + = marks [ i ] ;
}
average = sum / n ;
printf ( “ Average = % d ”, average ) ;
return 0 ;
}
Đầu ra
Enter n : 5
Enter number1 : 45
Enter number2 : 35
Enter number3 : 38
Enter number4 : 31
Enter number5 : 49
Average = 39
Trong ví dụ này, tôi sẽ tính trung bình cộng của n số do người dùng nhập vào .

1.6 Truy cập vào các phần tử bên ngoài giới hạn

Giả sử bạn khai báo mảng trong C gồm 10 thành phần
int testArray [ 10 ] ;
Bạn hoàn toàn có thể truy vấn vào những phần từ mảng từ testArray [ 0 ] đến testArray [ 9 ] .
Trường hợp nếu bạn cố gắng nỗ lực truy vấn testArray [ 12 ], thì thành phần này không sẵn có. Điều này dẫn đến việc đầu ra mà bạn nhận được sẽ không đúng như mong đợi. Hoặc hoàn toàn có thể lập trình sẽ bị lỗi, nhưng trong 1 số ít trường hợp, lập trình của bạn hoàn toàn có thể chạy đúng mực .
Do đó, bạn không nên truy vấn vào những thành phần mảng nằm bên ngoài số lượng giới hạn .

2. Mảng đa chiều trong lập trình C

Trong phần này, bạn sẽ được học cách thao tác với mảng đa chiều ( mảng hai hoặc ba chiều ) trải qua những ví dụ .
Trong lập trình C, bạn hoàn toàn có thể tạo một mảng gồm có nhiều mảng. Những mảng này được gọi là mảng đa chiều. Ví dụ ,
float x [ 3 ] [ 4 ] ;
Trong ví dụ này, x là một mảng 2 chiều ( 2 d ). Mảng này chứa 12 thành phần. Mảng này giống như một bảng gồm 3 hàng và mỗi hàng có 4 cột .
Bạn cũng hoàn toàn có thể khai báo một mảng ba chiều theo cách tương tự như như trên. Ví dụ ,
float y [ 2 ] [ 4 ] [ 3 ] ;
Ở đây, mảng y hoàn toàn có thể chứa 24 thành phần .

2.1 Khởi tạo một mảng đa chiều

Dưới đây là cách để khởi tạo mảng hai chiều và mảng ba chiều :

Khởi tạo mảng 2 chiều

/ / Different ways to initialize two-dimensional array
int c [ 2 ] [ 3 ] = { { 1, 3, 0 }, { – 1, 5, 9 } } ;
int c [ ] [ 3 ] = { { 1, 3, 0 }, { – 1, 5, 9 } } ;
int c [ 2 ] [ 3 ] = { 1, 3, 0, – 1, 5, 9 } ;

Khởi tạo mảng 3 chiều

Bạn hoàn toàn có thể khởi tạo mảng 3 chiều theo cách tựa như như khởi tạo mảng 2 chiều. Ví dụ ,
int test [ 2 ] [ 3 ] [ 4 ] = {
{ { 3, 4, 2, 3 }, { 0, – 3, 9, 11 }, { 23, 12, 23, 2 } } ,
{ { 13, 4, 56, 3 }, { 5, 9, 3, 5 }, { 3, 1, 4, 9 } } } ;

Ví dụ 1: mảng 2 chiều dùng để lưu trữ và in các giá trị

/ / C program to store temperature of two cities of a week and display it .

#include

const int CITY = 2 ;
const int WEEK = 7 ;
int main ( )
{
int temperature [ CITY ] [ WEEK ] ;
/ / Using nested loop to store values in a 2 d array
for ( int i = 0 ; i < CITY ; + + i ) { for ( int j = 0 ; j < WEEK ; + + j ) { printf ( “ City % d, Day % d : “, i + 1, j + 1 ) ; scanf ( “ % d ”, và temperature [ i ] [ j ] ) ; } } printf ( “ \ nDisplaying values : \ n \ n ” ) ; / / Using nested loop to display vlues of a 2 d array for ( int i = 0 ; i < CITY ; + + i ) { for ( int j = 0 ; j < WEEK ; + + j ) { printf ( “ City % d, Day % d = % d \ n ”, i + 1, j + 1, temperature [ i ] [ j ] ) ; } } return 0 ; } Đầu ra City 1, Day 1 : 33 City 1, Day 2 : 34 City 1, Day 3 : 35 City 1, Day 4 : 33 City 1, Day 5 : 32 City 1, Day 6 : 31 City 1, Day 7 : 30 City 2, Day 1 : 23 City 2, Day 2 : 22 City 2, Day 3 : 21 City 2, Day 4 : 24 City 2, Day 5 : 22 City 2, Day 6 : 25 City 2, Day 7 : 26 Hiển thị giá trị : City 1, Day 1 = 33 City 1, Day 2 = 34 City 1, Day 3 = 35 City 1, Day 4 = 33 City 1, Day 5 = 32 City 1, Day 6 = 31 City 1, Day 7 = 30 City 2, Day 1 = 23 City 2, Day 2 = 22 City 2, Day 3 = 21 City 2, Day 4 = 24 City 2, Day 5 = 22 City 2, Day 6 = 25 City 2, Day 7 = 26

Ví dụ 2: Tổng của 2 ma trận

/ / C program to find the sum of two matrices of order 2 * 2

#include

int main ( )
{
float a [ 2 ] [ 2 ], b [ 2 ] [ 2 ], result [ 2 ] [ 2 ] ;
/ / Taking input using nested for loop
printf ( “ Enter elements of 1 st matrix \ n ” ) ;
for ( int i = 0 ; i < 2 ; + + i )

for (int j = 0; j < 2; ++j)

{
printf ( “ Enter a % d % d : “, i + 1, j + 1 ) ;
scanf ( “ % f ”, và a [ i ] [ j ] ) ;
}
/ / Taking input using nested for loop
printf ( “ Enter elements of 2 nd matrix \ n ” ) ;
for ( int i = 0 ; i < 2 ; + + i ) for ( int j = 0 ; j < 2 ; + + j ) { printf ( “ Enter b % d % d : “, i + 1, j + 1 ) ; scanf ( “ % f ”, và b [ i ] [ j ] ) ; } / / adding corresponding elements of two arrays for ( int i = 0 ; i < 2 ; + + i ) for ( int j = 0 ; j < 2 ; + + j ) { result [ i ] [ j ] = a [ i ] [ j ] + b [ i ] [ j ] ; } / / Displaying the sum printf ( “ \ nSum Of Matrix : ” ) ; for ( int i = 0 ; i < 2 ; + + i ) for ( int j = 0 ; j < 2 ; + + j ) { printf ( “ %. 1 f \ t ”, result [ i ] [ j ] ) ; if ( j = = 1 ) printf ( “ \ n ” ) ; } return 0 ; } Đầu ra Enter elements of 1 st matrix Enter a11 : 2 ; Enter a12 : 0.5 ; Enter a21 : - 1.1 ; Enter a22 : 2 ; Enter elements of 2 nd matrix Enter b11 : 0.2 ; Enter b12 : 0 ; Enter b21 : 0.23 ; Enter b22 : 23 ; Sum Of Matrix : 2.2 0.5 - 0.9 25.0

Ví dụ 3: Mảng ba chiều

/ / C Program to store and print 12 values entered by the user

#include

int main ( )
{
int test [ 2 ] [ 3 ] [ 2 ] ;
printf ( “ Enter 12 values : \ n ” ) ;
for ( int i = 0 ; i < 2 ; + + i ) { for ( int j = 0 ; j < 3 ; + + j ) { for ( int k = 0 ; k < 2 ; + + k ) { scanf ( “ % d ”, và test [ i ] [ j ] [ k ] ) ; } } } / / Printing values with proper index . printf ( “ \ nDisplaying values : \ n ” ) ; for ( int i = 0 ; i < 2 ; + + i ) { for ( int j = 0 ; j < 3 ; + + j ) { for ( int k = 0 ; k < 2 ; + + k ) { printf ( “ test [ % d ] [ % d ] [ % d ] = % d \ n ”, i, j, k, test [ i ] [ j ] [ k ] ) ; } } } return 0 ; } Đầu ra Enter 12 values : 1 2 3 4 5 6 7 8 9 10 11 12 Hiển thị những giá trị : test [ 0 ] [ 0 ] [ 0 ] = 1 test [ 0 ] [ 0 ] [ 1 ] = 2 test [ 0 ] [ 1 ] [ 0 ] = 3 test [ 0 ] [ 1 ] [ 1 ] = 4 test [ 0 ] [ 2 ] [ 0 ] = 5 test [ 0 ] [ 2 ] [ 1 ] = 6 test [ 1 ] [ 0 ] [ 0 ] = 7 test [ 1 ] [ 0 ] [ 1 ] = 8 test [ 1 ] [ 1 ] [ 0 ] = 9 test [ 1 ] [ 1 ] [ 1 ] = 10 test [ 1 ] [ 2 ] [ 0 ] = 11 test [ 1 ] [ 2 ] [ 1 ] = 12

3. Hàm và mảng trong C

3.1 Truyền các mảng vào hàm trong lập trình C

Trong phần này, bạn sẽ được học cách truyền những mảng ( cả mảng một chiều và mảng đa chiều ) vào hàm trong lập trình C trải qua những ví dụ .
Trong lập trình C, bạn hoàn toàn có thể truyền hàng loạt mảng vào những hàm. Trước tiên, tôi sẽ ra mắt cho bạn về cách để truyền những thành phần riêng không liên quan gì đến nhau của một mảng vào những hàm .

Truyền các phần tử mảng riêng lẻ

Truyền những thành phần mảng vào hàm tương tự như như truyền những biến vào hàm .

Ví dụ 1: Truyền một mảng

#include

void display ( int age1, int age2 )
{
printf ( “ % d \ n ”, age1 ) ;
printf ( “ % d \ n ”, age2 ) ;
}
int main ( )
{
int ageArray [ ] = { 2, 8, 4, 12 } ;
/ / Passing second and third elements to display ( )
display ( ageArray [ 1 ], ageArray [ 2 ] ) ;
return 0 ;
}
Đầu ra
8
4

Ví dụ 2: Truyền nhiều mảng cho nhiều hàm

/ / Program to calculate the sum of array elements by passing to a function

#include

float calculateSum ( float age [ ] ) ;
int main ( ) {
float result, age [ ] = { 23.4, 55, 22.6, 3, 40.5, 18 } ;
/ / age array is passed to calculateSum ( )
result = calculateSum ( age ) ;
printf ( “ Result = %. 2 f ”, result ) ;
return 0 ;
}
float calculateSum ( float age [ ] ) {
float sum = 0.0 ;
for ( int i = 0 ; i < 6 ; + + i ) { sum + = age [ i ] ; } return sum ; } Đầu ra Result = 162.50 Để truyền hàng loạt mảng cho một hàm thì bạn chỉ cần truyền tên của mảng dưới dạng đối số là được . result = calculateSum ( age ) ; Tuy nhiên, cần quan tâm việc sử dụng dấu [ ] trong định nghĩa hàm . float calculateSum ( float age [ ] ) { … .. } Việc này nhằm mục đích thông tin cho trình biên dịch rằng bạn đã truyền mảng một chiều vào hàm này .

Truyền mảng đa chiều vào một hàm

Để truyền mảng đa chiều vào một hàm, bạn chỉ cần truyền tên của mảng vào hàm là được ( tương tự như như mảng một chiều ) .

Ví dụ 3: Truyền các mảng hai chiều

#include

void displayNumbers ( int num [ 2 ] [ 2 ] ) ;
int main ( )
{
int num [ 2 ] [ 2 ] ;
printf ( “ Enter 4 numbers : \ n ” ) ;
for ( int i = 0 ; i < 2 ; + + i ) for ( int j = 0 ; j < 2 ; + + j ) scanf ( “ % d ”, và num [ i ] [ j ] ) ; / / passing multi-dimensional array to a function displayNumbers ( num ) ; return 0 ; } void displayNumbers ( int num [ 2 ] [ 2 ] ) { printf ( “ Displaying : \ n ” ) ; for ( int i = 0 ; i < 2 ; + + i ) { for ( int j = 0 ; j < 2 ; + + j ) { printf ( “ % d \ n ”, num [ i ] [ j ] ) ; } } } Đầu ra Enter 4 numbers : 2 3 4 5 Hiển thị : 2

3

4
5

Lưu ý, bạn có thể truyền các mảng trong C vào các hàm. Tuy nhiên, bạn không thể di chuyển các mảng về lại chỗ cũ sau khi đã truyền chúng vào các hàm.