Thứ Sáu, 30 tháng 6, 2017

[C++] Bài 4: Hằng và biến trong C++

"Variables represent storage locations in the computer's memory. Literals are constant values that are assigned to variables."

 Stating out with C++ - Tony Gaddis

1. Hằng trong C++ (Literals Constants)

      Ta có thể định nghĩa hằng là một giá trị không đổi trong quá trình sử dụng. Trong C++ hằng là một giá trị được đặt trực tiếp trong chương trình và nó là không đổi vì bạn không thể thay đổi giá trị của nó. Với cách đơn giản nhất có thể nói rằng hằng là giá trị của biến vì đây là cách dùng thông dụng nhất của hằng (nhưng không phải là duy nhất).
      Ví dụ:
int x = 5; //5 là hằng nguyên được gán vào biến x hay biến x được gán giá trị nguyên là 5
double y = 1.23123; //1.23123 là hằng số thực được gán vào biến y hay biến y được gán giá trị thực là 1.23123
      Đối với các hằng số, ta có thể thêm các hậu tố (suffixes) để chỉ rõ kiểu dữ liệu của chúng. Các hậu tố thường đi kèm là u (unsigned), l (long), f (float). Đối với số nguyên thì việc này cũng không quá cần thiết. Đối với số thực dấu phẩy động, mặc định kiểu dữ liệu được định nghĩa là double, để đưa về dạng float ta dùng hậu tố f.
Ví dụ:
unsigned int n = 100u;
long m = 1245l;
float x = 126.36f;
      C++ cũng hỗ trợ các hằng ký tự và chuỗi (string).
Ví dụ:
char c = 'A';
cout<< "Hello World!!";

2. Biến hằng (Symbolic Constants)


      Tác giả xin được gọi nó là biến hằng, trong C++, hằng được chia ra làm 2 loại đó là hằng (Literals) và (tạm gọi) biến hằng (Symbolic). Biến hằng cũng là một hằng nhưng nó không cố định mà có thể thay đổi (!). Nói cách khác biến hằng là hằng có thể thay đổi giá trị của nó bất cứ thời điểm nào ta muốn. Nghe thì sai sai nhưng thật ra thì lại đúng đúng, nếu ai từng học C++ rồi thì ta có thể biết đến 2 từ khoá là constant và #define đúng không?? Và ta được biết nó là để khai báo hằng, nhưng thật ra là ta hiểu sai về nó chứ không phải được dạy sai đâu nhá (!). Ta cứ nghĩ nó là hằng, là hằng đơn thuần (Literals), thế mà nhiều người vẫn thay đổi nó mà không nhận ra nó là biến hằng (Symbolic).
      Với biến hằng ta phải gán giá trị khởi tạo cho nó trước nếu không sẽ xảy ra lỗi.
Ví dụ:
const int n = 5;
const int n {5};
      Với biến hằng ta có thể khai báo chúng với giá trị khởi tạo là một biến.
Ví dụ:
int x;
cin>>x;
const int n {x}; //biến hằng n được gán giá trị khởi tạo là giá trị của biến x
     Như đã nói ở trên, ta có thể dùng 2 cách để khai báo một biến hằng.
Ví dụ:
const int n = 5;
#define n 5;
      Tuy nhiên ta lại không hay (không khuyến khích) sử dụng khai báo chỉ thị #define để khai báo một biến hằng bởi vì:
Thứ nhất: việc khai báo bằng chỉ thị #define gây khó khăn cho trình biên dịch do khi biên dịch, trình biên dịch không trực tiếp thay giá trị được định nghĩa của biến hằng vào mà phải tìm xem biến hằng được định nghĩa ở đâu rồi mới quay lại biên dịch đoạn code đó.
Thứ hai: việc sử dụng #define có thể gây ra xung đột giữa các biến sử dụng, về phạm vi sử dụng của biến (biến cục bộ và biến toàn cục) sẽ được nói ở phần biến.
      Vậy nên ta không khuyến khích sử dụng chỉ thị #define để khai báo biến hằng mà thay vào đó ta sử dụng khai báo const.

3. Biến trong C++ (Variables)


      Biến là thành phần mà ta luôn sử dụng cho mỗi chương trình C++. Biến như đã được định nghĩa ở trên đầu bài nó cho phép ta sử dụng bộ nhớ của máy tính để lưu trữ và làm việc với các giá trị. Để sử dụng một biến ta buộc phải khai báo biến đó trước.'
Ví dụ:
int x;
float y = 532.333;
      Việc khai báo biến chúng ta cho máy tính và trình biên dịch biết được tên biến , kiểu dữ liệu của biến và giá trị khởi tạo của biến. Với một biến khi được khai báo mà chưa khởi tạo thì tuỳ theo trình biên dịch gán giá trị khởi tạo cho nó. Ví dụ trong Dev C là ), trong Visual Studio là 0xccccc,...
      Trong C++, ta chia biến ra làm 2 loại là biến cục bộ/địa phương (Local) và biến toàn cục (Global).
        Biến cục bộ là biến chỉ được khai báo và sử dụng trong một phạm vi nhất định như một hàm, một biểu thức, một vòng lặp. Biến toàn cục là biến được sử dụng trong cả chương trình.
Ví dụ:
#include <iostream>
using namespace std;
int x = 5;
int main()
{
        while(x>0)
        {
                  int a = 1;
                  cout << a<< end;
                  x--;
         }
        return 0;
}
         Trong ví dụ trên, x là biến toàn cục có thể sử dụng mọi chỗ trong hàm main(), còn a là biến cục bộ, chỉ sử dụng trong vòng while, nếu ra khỏi vòng while biến a không có giá trị và ta phải khai báo lại để sử dụng.
        Chú ý:
Không được phép khai báo biến hai lần trong cùng một phạm vi (1 hàm, 1 vòng lặp,...).
Không khuyến khích sử dụng tên biến cục bộ và toàn cục trùng nhau (mặc dù được phép) để tránh nhầm lẫn giữa các biến 

0 nhận xét:

Đăng nhận xét