Các biến và kiểu C ++: int, double, char, string, bool

Mục lục:

Anonim

Các biến trong C ++

Một biến C ++ cung cấp cho chúng ta khả năng lưu trữ được đặt tên. Nó cho phép lập trình viên thao tác dữ liệu theo nhu cầu. Mọi biến đều có một kiểu trong C ++. Kiểu biến giúp xác định kích thước và cách bố trí bản đồ bộ nhớ của biến, phạm vi giá trị có thể được lưu trữ trong bộ nhớ đó và tập hợp các thao tác có thể áp dụng cho nó.

Trong hướng dẫn C ++ này, bạn sẽ học:

  • Các biến trong C ++
  • Các loại biến cơ bản trong C ++
  • Quy tắc khai báo biến trong C ++
  • Các kiểu dữ liệu biến trong C ++
  • Tên biến hoặc số nhận dạng
  • Const Qualifier trong C ++
  • Phạm vi của các biến trong C ++
  • Chuyển đổi loại biến
  • Đăng ký các biến
  • Trình tự thoát

Các loại biến cơ bản trong C ++

Dưới đây là các loại biến C ++ cơ bản:

Int:

Một số nguyên là một chữ số (được kết hợp với các số) mà không có bất kỳ phần phân số hoặc hàm mũ nào. Thí dụ. 120, -90, v.v.

Gấp đôi:

Nó là một giá trị dấu chấm động có độ chính xác kép. Ví dụ: 11.22, 2.345

Biểu đồ:

Một chữ ký tự được tạo bằng cách đặt một ký tự bên trong dấu ngoặc kép. Ví dụ: 'a', 'm', 'F', 'P', '}' v.v.

Phao nổi:

Một ký tự dấu phẩy động là một ký tự số có dạng phân số hoặc dạng lũy ​​thừa. Ví dụ: 1.3, 2.6

Chữ viết chuỗi:

Một chuỗi ký tự là một chuỗi các ký tự được đặt trong dấu ngoặc kép. Ví dụ: "How are you?"

Bool:

Nó giữ giá trị Boolean đúng hoặc sai.

Quy tắc khai báo biến trong C ++

Dưới đây là một số quy tắc phổ biến để đặt tên biến:

  • Tên biến C ++ chỉ có thể có bảng chữ cái, số và dấu gạch dưới.
  • Tên biến C ++ không được bắt đầu bằng số.
  • Tên biến không được bắt đầu bằng ký tự viết hoa.
  • Một tên biến được sử dụng trong C ++ không được là một từ khóa. Ví dụ, int là một từ khóa được sử dụng để biểu thị số nguyên.
  • Tên biến C ++ có thể bắt đầu bằng dấu gạch dưới. Tuy nhiên, nó không được coi là một thực hành tốt.

Các kiểu dữ liệu biến trong C ++

C ++ định nghĩa một tập hợp các kiểu nguyên thủy

Kiểu void không có giá trị liên quan với nó và chỉ có thể được sử dụng trong một số trường hợp. Nó phổ biến nhất là kiểu trả về của các hàm không trả về giá trị.

Các kiểu số học bao gồm ký tự, số nguyên, giá trị Boolean và số dấu phẩy động. Loại số học nếu được chia thành 2 loại

  1. Các kiểu dấu phẩy động . Dấu phẩy (hoặc kiểu nổi) đại diện cho số thập phân. Tiêu chuẩn IEEE chỉ định số lượng chữ số có nghĩa tối thiểu. Hầu hết các trình biên dịch thường cung cấp độ chính xác cao hơn mức tối thiểu được chỉ định. Thông thường, phao được biểu thị bằng 32 bit, gấp đôi trong 64 bit và dài gấp đôi ở 96 hoặc 128 bit.
  2. Kiểu tích phân (bao gồm kiểu ký tự, số nguyên và kiểu Boolean). Kiểu Boolean chỉ có hai kiểu giá trị: Đúng hoặc Sai. Có một số char loại, hầu hết trong số đó tồn tại để hỗ trợ quốc tế hóa. Kiểu ký tự cơ bản nhất là char. Một ký tự có cùng kích thước với một byte máy đơn có nghĩa là một byte đơn.

Các loại Tích phân có thể có dấu hoặc không dấu.

Loại đã ký : Chúng đại diện cho số âm hoặc số dương (bao gồm cả số 0). Trong loại có dấu, phạm vi phải được chia đều giữa các giá trị + ve và -ve. Do đó, một ký tự có dấu 8 bit sẽ giữ các giá trị từ -127 đến 127.

Loại không dấu: Trong kiểu không dấu, tất cả các giá trị đều> = 0. Một ký tự không dấu 8 bit có thể chứa từ 0 đến 255 (bao gồm cả hai).

Tên biến hoặc số nhận dạng

Số nhận dạng có thể bao gồm một số chữ cái, chữ số và ký tự gạch dưới hoặc một số kết hợp của chúng. Không có giới hạn nào được áp dụng cho độ dài tên.

Định danh phải

  • bắt đầu bằng một chữ cái hoặc một dấu gạch dưới ('_').
  • Và có phân biệt chữ hoa chữ thường; chữ hoa và chữ thường khác nhau:

// định nghĩa bốn biến int khác nhau

int guru99, gurU99, GuRu99, GURU99;

Ngôn ngữ C ++ đã dành một số tên để sử dụng.

Có nhiều quy ước được chấp nhận để đặt tên biến trong các ngôn ngữ lập trình khác nhau. Tuân theo các quy ước này có thể cải thiện khả năng đọc của chương trình.

  • Một số nhận dạng phải cung cấp ít nhất một số dấu hiệu về ý nghĩa của nó.
  • Tên biến thường là chữ thường-guru99, không phải Guru99 hoặc GURU99.
  • Các lớp chúng tôi định nghĩa thường bắt đầu bằng một ký tự hoa.
  • Số nhận dạng chứa nhiều từ sẽ phân biệt trực quan mọi từ. Ví dụ: guru99_website không phải guru99website.

Khai báo và định nghĩa biến trong C ++

Một khai báo của một biến làm cho chương trình biết tên trong phạm vi mà nó được định nghĩa. Thí dụ:

int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};

Const Qualifier trong C ++

Giả sử có một biến buffsize cho biết số lượng đầu vào sẽ được lấy từ người dùng. Ở đây, chúng tôi không muốn thay đổi giá trị của buffsize trong suốt chương trình. Chúng tôi muốn xác định một biến có giá trị mà chúng tôi biết không nên thay đổi.

Trong trường hợp này, hãy sử dụng từ khóa const

const int bufSize = 512; // input buffer size

Điều này định nghĩa bufSize là một hằng số. Bất kỳ nỗ lực nào để gán hoặc thay đổi bufSize đều gây ra lỗi.

Ở đây, chúng ta không thể thay đổi giá trị của một đối tượng const sau khi chúng ta tạo nó, nó phải được khai báo và khởi tạo bắt buộc. Nếu không, trình biên dịch sẽ báo lỗi.

const int i = get_size(); // ok: initialized at run timeconst int j = 42; // ok: initialized at compile timeconst int k; // error: k is uninitialized constint i = 42;const int ci = i; // ok: the value in i is copied into ci

Phạm vi của các biến trong C ++

Phạm vi là một khoảng của chương trình mà một biến có ý nghĩa. Hầu hết cùng một tên có thể được sử dụng để chỉ các thực thể khác nhau trong các phạm vi khác nhau. Các biến có thể nhìn thấy từ thời điểm chúng được khai báo cho đến khi kết thúc phạm vi mà phần khai báo của chúng xuất hiện.

#include int main(){int sum = 0;// sum values from 1 through 10 inclusivefor (int val = 1; val <= 10; ++val)sum += val; // equivalent to sum = sum + valcout << "Sum of 1 to 10 inclusive is "<< sum <

Chương trình này xác định 3 tên, viz, main, sum và val. Nó sử dụng tên không gian tên std, cùng với hai tên khác từ không gian tên đó-cout và endl.

  • Tên hàm "main" được định nghĩa bên ngoài dấu ngoặc nhọn. Tên hàm main giống như hầu hết các tên khác được định nghĩa bên ngoài một hàm - có phạm vi toàn cục. Có nghĩa là sau khi được khai báo, các tên ở phạm vi toàn cục có thể truy cập được trong suốt chương trình.
  • Tổng biến được xác định trong phạm vi của khối là phần thân của hàm chính. Nó có thể được truy cập từ điểm khai báo của nó và trong suốt phần còn lại của phần thân của hàm chính. Tuy nhiên, không nằm ngoài nó. Điều này có nghĩa là tổng biến có phạm vi khối .
  • Biến val được định nghĩa trong phạm vi của câu lệnh "for". Nó có thể dễ dàng được sử dụng trong câu lệnh đó nhưng không được sử dụng ở nơi khác trong hàm chính. Nó có phạm vi địa phương .

Phạm vi lồng nhau

Phạm vi có thể chứa các phạm vi khác. Phạm vi được chứa (hoặc lồng nhau) được gọi là phạm vi bên trong. Phạm vi chứa là phạm vi bên ngoài.

#include using namespace std;// Program for illustration purposes only: It is bad style for a function// to use a global variable and also define a local variable with the same nameint reused = 42; // reused has global scopeint main(){int unique = 0; // unique has block scope// output #1: uses global reused; prints 42 0cout << reused << " " << unique << endl;int reused = 0; // new, local object named reused hides global reused// output #2: uses local reused; prints 0 0cout << reused << " " << unique << endl;// output #3: explicitly requests the global reused; prints 42 0cout << ::reused << " " << unique << endl;return 0;}

Đầu ra số 1 xuất hiện trước định nghĩa cục bộ về tái sử dụng. Do đó, sản lượng này

là câu lệnh sử dụng tên được sử dụng lại được xác định trong phạm vi toàn cầu. Câu lệnh này xuất ra

42 0

Đầu ra # 2 xảy ra sau định nghĩa cục bộ của việc sử dụng lại. Nó bây giờ là trong phạm vi. Do đó, câu lệnh đầu ra thứ hai này chỉ đơn giản sử dụng đối tượng cục bộ có tên được tái sử dụng thay vì toàn cục và kết quả đầu ra

0 0

Đầu ra # 3 ghi đè các quy tắc xác định phạm vi mặc định bằng cách sử dụng toán tử phạm vi. Phạm vi toàn cầu không có tên. Do đó, khi toán tử phạm vi (: :) có phía bên trái trống. Nó diễn giải nó như một yêu cầu tìm nạp tên ở phía bên tay phải của phạm vi toàn cục. Do đó, biểu thức sử dụng các đầu ra và sử dụng lại toàn cục

42 0

Chuyển đổi loại biến

Một biến của một kiểu này có thể được chuyển đổi thành một kiểu khác. Nó được gọi là "Chuyển đổi loại". Hãy xem các quy tắc để chuyển đổi các kiểu biến C ++ khác nhau:

Việc gán non-bool cho một biến bool sẽ cho kết quả là false nếu giá trị là 0 và ngược lại là true.

bool b = 42; // b is true

Việc gán bool cho một trong các kiểu số học khác sẽ mang lại 1 nếu bool đúng và 0 nếu bool sai.

bool b = true;int i = b; // i has value 1

Việc gán giá trị dấu phẩy động cho một biến kiểu int sẽ mang lại giá trị bị cắt bớt. Giá trị được lưu trữ là phần trước dấu thập phân.

int i = 3.14; // i has value 3

Việc gán giá trị int cho một biến kiểu float dẫn đến phần phân số trở thành 0. Độ chính xác thường bị mất nếu số nguyên có nhiều bit hơn biến động có thể chứa.

Int i=3;double pi = i; // pi has value 3.0

Nếu chúng tôi cố gắng gán một giá trị nằm ngoài phạm vi cho một biến kiểu không có dấu, kết quả là phần còn lại của giá trị% (modulo)

Ví dụ: kiểu char không dấu 8 bit có thể chứa các giá trị từ 0 đến 255, bao gồm cả. Việc gán giá trị bên ngoài phạm vi này sẽ dẫn đến việc trình biên dịch gán phần còn lại của modulo giá trị đó 256. Do đó, theo logic ở trên, việc gán -1 cho một char 8-bit không dấu sẽ cho đối tượng đó giá trị 255.

unsigned char c = -1; // assuming 8-bit chars, c has value 255

Nếu chúng ta cố gắng gán một giá trị nằm ngoài phạm vi cho một đối tượng kiểu có dấu, kết quả là không thể đoán trước. Nó là không xác định. Chương trình có thể hoạt động ở bên ngoài, hoặc nó có thể bị lỗi hoặc nó có thể tạo ra các giá trị rác.

signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined

Trình biên dịch áp dụng cùng một loại chuyển đổi này khi chúng tôi sử dụng giá trị của một loại trong đó giá trị của loại khác được mong đợi.

int i = 42;if (i) // condition will evaluate as truei = 0;

Nếu giá trị này = 0, thì điều kiện là sai; tất cả các giá trị khác (khác 0) đều mang lại giá trị true. Theo khái niệm tương tự, khi chúng ta sử dụng bool trong một biểu thức số học, giá trị của nó luôn được chuyển đổi thành 0 hoặc 1. Do đó, sử dụng bool trong một biểu thức số học thường hầu như không chính xác.

Thận trọng: Không kết hợp các loại đã ký và chưa ký

Các biểu thức kết hợp có dấu và không dấu có thể mang lại kết quả đáng ngạc nhiên và sai khi giá trị có dấu là âm. Như đã thảo luận ở trên, các giá trị có dấu sẽ tự động được chuyển đổi thành không dấu.

Ví dụ, trong một biểu thức số học như

x* y

Nếu x là -1 và y là 1, và nếu cả x và y đều là int, thì giá trị là -1.

Nếu x là int và y không có dấu, thì giá trị của biểu thức này phụ thuộc vào số bit của một số nguyên trên máy biên dịch. Trên máy của chúng tôi, biểu thức này cho kết quả là 4294967295.

Đăng ký các biến

Các biến thanh ghi được truy cập nhanh hơn so với các biến bộ nhớ. Vì vậy, các biến thường được sử dụng trong chương trình C ++ có thể được đưa vào thanh ghi bằng cách sử dụng từ khóa register . Từ khóa register cho trình biên dịch biết để lưu biến đã cho trong một thanh ghi. Đó là sự lựa chọn của trình biên dịch có đưa nó vào sổ đăng ký hay không. Nói chung, các trình biên dịch tự thực hiện các tối ưu hóa khác nhau, bao gồm việc đưa một số biến vào sổ đăng ký. Không có giới hạn về số lượng biến đăng ký trong một chương trình C ++. Nhưng trình biên dịch có thể không lưu trữ biến trong một thanh ghi. Điều này là do bộ nhớ thanh ghi rất hạn chế và thường được sử dụng bởi hệ điều hành.

Định nghĩa:

register int i;

Bình luận

Nhận xét là các phần của mã bị trình biên dịch bỏ qua. Nó cho phép lập trình viên ghi chú trong các lĩnh vực liên quan của mã nguồn / chương trình. Nhận xét có ở dạng khối hoặc dòng đơn. Các bình luận của chương trình là các câu giải thích. Nó có thể được bao gồm trong mã C ++ giúp bất kỳ ai đọc được mã nguồn của nó. Tất cả các ngôn ngữ lập trình đều cho phép một số hình thức nhận xét. C ++ hỗ trợ cả nhận xét một dòng và nhiều dòng.

  • Nhận xét một dòng là những nhận xét bắt đầu bằng // và tiếp tục cho đến cuối dòng. Nếu ký tự cuối cùng trong dòng nhận xét là \ thì nhận xét sẽ tiếp tục ở dòng tiếp theo.
  • Nhận xét nhiều dòng là những nhận xét bắt đầu bằng / * và kết thúc bằng * /.
/* This is a comment *//* C++ comments can also* span multiple lines*/

Trình tự thoát

Một số ký tự, chẳng hạn như ký tự xóa lùi và ký tự điều khiển, không có hình ảnh hiển thị. Các ký tự như vậy được gọi là ký tự không in được. Các ký tự khác (dấu ngoặc kép đơn và dấu ngoặc kép, dấu chấm hỏi và dấu gạch chéo ngược) có ý nghĩa đặc biệt trong nhiều ngôn ngữ lập trình.

Các chương trình của chúng tôi không thể sử dụng trực tiếp bất kỳ ký tự nào trong số này. Thay vào đó, chúng ta có thể sử dụng một chuỗi thoát để biểu diễn các ký tự như vậy. Một chuỗi thoát bắt đầu bằng dấu gạch chéo ngược.

Ngôn ngữ lập trình C ++ định nghĩa một số chuỗi thoát:

Nó làm gì?

Tính cách

Dòng mới

\ n

Tab dọc

\ v

Dấu gạch chéo ngược

\\

Vận chuyển trở lại

\ r

Tab ngang

\ t

Backspace

\ b

Dấu chấm hỏi

\?

Thức ăn dạng

\ f

Cảnh báo (chuông)

\ a

Dấu ngoặc kép

\ "

Trích dẫn duy nhất

\ '

Chúng tôi sử dụng một chuỗi thoát như thể nó là một ký tự:

cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline

Chúng tôi cũng có thể viết chuỗi thoát tổng quát \ x theo sau bởi một hoặc nhiều chữ số thập lục phân. Hoặc chúng tôi sử dụng một \ theo sau bởi một hoặc hai hoặc ba chữ số bát phân. Chuỗi thoát tổng quát đại diện cho giá trị số của ký tự. Một số ví dụ (giả sử tập ký tự Latin-1):

\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')

Chúng tôi có thể sử dụng các chuỗi thoát được xác định trước, vì chúng tôi đang sử dụng bất kỳ ký tự nào khác.

cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newline

Tóm lược

  • Một biến C ++ cung cấp cho chúng ta khả năng lưu trữ được đặt tên.
  • Các kiểu biến C ++: int, double, char, float, string, bool, v.v.
  • Phạm vi chứa (hoặc lồng nhau) được gọi là phạm vi bên trong và phạm vi chứa là phạm vi bên ngoài.
  • Một biến của một kiểu này có thể được chuyển đổi thành một kiểu khác. Nó được gọi là "Chuyển đổi loại".
  • Các biến thanh ghi được truy cập nhanh hơn so với các biến bộ nhớ.
  • Nhận xét là các phần của mã bị trình biên dịch bỏ qua.
  • Một số ký tự, chẳng hạn như ký tự xóa lùi và ký tự điều khiển, không có hình ảnh hiển thị.