Exercise 8: Sizes And Arrays

Xin chào mọi người, bài học hôm nay chúng ta sẽ tìm hiểu về mảng 1 chiều, một phần cực kì quan trọng trong C. Các bạn hãy học tốt phần này, để sau này phục vụ tốt hơn cho con trỏ (pointer) – một trong những phần quan trọng nhất và khó nhất. À, bài học hôm này còn học về toán tử sizeof – toán tử lấy kích thước kiểu dữ liệu. Vào bài thôi nào.

Hãy tạo một file ex8.c với nội dung sau:

#include <stdio.h>

int main(int argc, char* argv[])
{
    int areas[] = {10, 12, 13, 14, 20};
    char name[] = "Zed";
    char full_name[] = {
        'Z', 'e', 'd',
        ' ', 'A', '.', ' ',
        'S', 'h', 'a', 'w', '\0'
    };

    // WARNING: On some systems you may have to change the
    // %ld in this code to a %u since it will use insigned ints
    printf("The size of an int: %ld\n", sizeof(int));
    printf("The size of areas (int[]): %ld\n", sizeof(areas));
    printf("The number of ints in areas: %ld\n", sizeof(areas) / sizeof(int));
    printf("The first area is %d, the 2nd %d.\n",areas[0], areas[1]);
    printf("The size of a char: %ld\n",sizeof(char));
    printf("The size of name (char[]): %ld\n", sizeof(name));
    printf("The number of name (char[]): %ld\n", sizeof(name) / sizeof(char));
    printf("The size of full_name (char[]): %ld\n", sizeof(full_name));
    printf("The number of chars: %ld\n", sizeof(full_name) / sizeof(char));
    printf("name=\"%s\" and full_name= \"%s\"\n", name, full_name);
    return 0;
}
Mình xin nhắc lại, code các bạn phải tự gõ bằng tay nhé. Khi các bạn viết code xong thì hãy đọc lại nó, từng dòng xem các bạn có hiểu không. Nếu không hiểu thì xem phần giải thích code hoặc comment vào bên dưới nhé. Bây giờ các bạn tiến hành biên dịch và run, rồi xem kết quả nhé! Nhớ sử dụng Makefile và Valgrind.

Chạy các bạn phải được như vậy nhé:

$ make ex8
cc -Wall -g
ex8.c
-o ex8
$ ./ex8
The size of an int: 4
The size of areas (int[]): 20
The number of ints in areas: 5
The first area is 10, the 2nd 12.
The size of a char: 1
The size of name (char[]): 4
The number of chars: 4
The size of full_name (char[]): 12
The number of chars: 12
name="Zed" and full_name="Zed A. Shaw"
$
Đến phần giải thích code:
1. areas[] là một mảng số nguyên (integer), mảng này bao gồm 5 phần tử. Các bạn chú ý cách khai báo và cách gán các giá trị cho mảng như trong code: <kiểu biến> <tên mảng>[<số phần tử mảng>] = {<danh sách các phần tử ngăn cách bằng dấu phẩy>};.
2. Khi khai báo chuỗi (mảng các kí tự), các bạn khai báo theo 2 cách như trong code. Ở dòng thứ 6, mảng name có 4 phần tử chứ không phải 3 như các bạn thấy, bởi vì nó có một phần tử kết thúc chuỗi nằm ở cuối chuỗi ‘\0’.

3.Khi các bạn muốn lấy phần tử trong mảng thì chỉ cần chỉ ra số thứ tự của phần tử đó. Ví dụ areas[0] = 10, areas[1] = 12. Chú ý là trong C thì phần tử đầu tiên của mảng có trị số là 0.
4. Toán tử sizeof dùng để lấy kích thước kiểu dữ liệu. Ví dụ ở dòng thứ 15, sizeof(int) = 4 vì kiểu int có 4 byte.

Reseach

1. Thực hành thêm về mảng, có bạn có thể tự tạo mảng và số phần tử của mảng, cứ thực hành và đọc những lỗi hay cảnh báo của nó.

2. Tìm hiểu về toán tử sizeof khi các bạn sử dụng các CPU khác nhau. Ví dụ như khi các bạn sử dụng PIC 16F877A (một microcontroller), thì biến int chỉ có 1 byte, nhưng khi sử dụng máy tính (32bit hay 64bit) thì int có 4 byte.

End

Advertisements