tek4

[Lập trình C từ 0 đến 1] Bài 7. Biến trong C và các vấn đề liên quan

by - September. 21, 2021
Kiến thức
Học
<h1 class="post-tile entry-title">[Lập tr&igrave;nh C từ 0 đến 1] B&agrave;i 7. Biến trong C v&agrave; c&aacute;c vấn đề li&ecirc;n quan</h1> <p>B&agrave;i viết &ldquo;[Lập tr&igrave;nh C từ 0 đến 1] B&agrave;i 7. Biến trong C v&agrave; c&aacute;c vấn đề li&ecirc;n quan&rdquo; l&agrave; b&agrave;i viết tiếp theo nằm trong series hướng dẫn học lập tr&igrave;nh C của <a href="https://tek4.vn/" target="_blank" rel="noopener">tek4.vn</a>.</p> <p>Độc giả c&oacute; thể tham khảo c&aacute;c b&agrave;i viết kh&aacute;c trong series b&agrave;i viết n&agrave;y&nbsp;<a href="https://tek4.vn/lap-trinh-c-co-ban-den-nang-cao/" target="_blank" rel="noopener">tại đ&acirc;y</a></p> <p>B&agrave;i viết n&agrave;y sẽ cung cấp đến độc giả về Biến l&agrave; g&igrave;? Biến được sử dụng như thế n&agrave;o trong C. Trong loạt b&agrave;i hướng dẫn [Lập tr&igrave;nh C từ 0 đến 1], IDE được sử dụng l&agrave; Code::Blocks</p> <ol> <li> <h2>Biến l&agrave; g&igrave;?</h2> </li> </ol> <p>Trong C muốn lưu trữ hay đặt gi&aacute; trị n&agrave;o đ&oacute; để sử dụng lại ta cần lưu trữ n&oacute; v&agrave;o một địa chỉ bộ nhớ. Muốn sử dụng hay lưu lại ta cần gọi ch&iacute;nh x&aacute;c địa chỉ đ&oacute;. Ch&uacute;ng ta kh&ocirc;ng thể gọi trực tiếp địa chỉ &ocirc; nhớ v&igrave; vậy Biến l&agrave; giải ph&aacute;p g&aacute;n một t&ecirc;n v&agrave;o một địa chỉ nhớ để ta sử dụng một c&aacute;ch dễ d&agrave;ng hơn.</p> <p>Mặc kh&aacute;c, Gi&aacute; trị của &ocirc; nhớ c&oacute; thể được thay đổi v&agrave; c&oacute; thể được sử dụng lại nhiều lần. Mỗi biến trong C c&oacute; một loại dữ liệu cụ thể, d&ugrave;ng để x&aacute;c định k&iacute;ch thước của bộ nhớ của biến v&agrave; phạm vi c&aacute;c gi&aacute; trị c&oacute; thể được lưu trữ trong bộ nhớ đ&oacute;.</p> <p>T&ecirc;n của một biến c&oacute; thể bao gồm c&aacute;c chữ c&aacute;i, chữ số v&agrave; k&yacute; tự gạch dưới. N&oacute; phải bắt đầu bằng một chữ c&aacute;i thư hoặc một gạch dưới. Biến trong C c&oacute;&nbsp;<strong>ph&acirc;n biệt chữ hoa v&agrave; chữ thường</strong> ho&agrave;n to&agrave;n tương tự với c&aacute;ch đặt t&ecirc;n ch&uacute;ng ta đ&atilde; đọc qua ở b&agrave;i viết trước.</p> <h2>V&iacute; dụ:</h2> <p>Biến a c&oacute; kiểu dữ liệu v&agrave; interger vậy trong bộ nhớ n&oacute; sẽ c&oacute; k&iacute;ch thước l&agrave; 2 byte v&agrave; phạm vi của n&oacute; l&agrave; -32,768 tới 32,767</p> <ol start="2"> <li> <h2>Khai b&aacute;o v&agrave; sử dụng biến</h2> </li> </ol> <h3>2.1 Khai b&aacute;o</h3> <h4>Kiểu khai b&aacute;o 1</h4> <table width="300"> <tbody> <tr> <td width="300">Kiểu_dữ_liệu t&ecirc;n_biến;</td> </tr> </tbody> </table> <p>V&iacute; dụ về khai b&aacute;o biến:</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">int hello; float tek4; char vn;</pre> <p>Ở đ&acirc;y c&oacute; ba biến được khai b&aacute;o l&agrave; hello,tek4,vn v&agrave; int, float, char l&agrave; c&aacute;c kiểu dữ liệu của lần lượt ba biến đ&oacute;.</p> <h4>Kiểu khai b&aacute;o 2</h4> <table width="300"> <tbody> <tr> <td width="300">Kiểu_dữ_liệu t&ecirc;n_biến = gi&aacute; trị;</td> </tr> </tbody> </table> <p>V&iacute; dụ về khai b&aacute;o biến c&oacute; gi&aacute; trị:</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">int soNguyen=2021; float soThuc=20.21; char kuTu='a';</pre> <p>Biến soNguyen l&agrave; biến c&oacute; kiểu dữ liệu l&agrave; int v&agrave; gi&aacute; trị của n&oacute; l&agrave; 2021</p> <p>Biến soThuc l&agrave; biến c&oacute; kiểu dữ liệu l&agrave; float v&agrave; gi&aacute; trị của n&oacute; l&agrave; 20,21</p> <p>Biến kyTu l&agrave; biến kiểu char v&agrave; gi&aacute; trị của n&oacute; l&agrave; k&yacute; tự a</p> <h4>Kiểu khai b&aacute;o 3</h4> <table style="width: 30.0667%;" width="300"> <tbody> <tr> <td style="width: 100%;" width="300">Kiểu_dữ_liệu danh_s&aacute;ch_biến_v&agrave;_gi&aacute; trị_nếu_c&oacute;;</td> </tr> </tbody> </table> <p>V&iacute; dụ về khai b&aacute;o danh s&aacute;ch biến:</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">int a,b,c; int ta=10,tc=20,tb=30;</pre> <p>khai b&aacute;o c&ugrave;ng l&uacute;c ba biến a,b,c l&agrave; kiểu int v&agrave; kh&ocirc;ng c&oacute; gi&aacute; trị ban đầu</p> <p>C&ograve;n ba biến ta,tc,tb l&agrave; c&aacute;c biến kiểu int v&agrave; c&oacute; gi&aacute; trị lần lượt l&agrave; 10,20,30.</p> <h4>Quy tắc dặt t&ecirc;n biến trong C biến trong C</h4> <ul> <li>Một biến c&oacute; thể c&oacute; c&aacute;c chữ c&aacute;i, chữ số v&agrave; dấu gạch dưới.</li> <li>T&ecirc;n biến chỉ c&oacute; thể bắt đầu bằng bảng chữ c&aacute;i v&agrave; dấu gạch dưới. N&oacute; kh&ocirc;ng thể bắt đầu bằng chữ số.</li> <li>Kh&ocirc;ng c&oacute; khoảng trắng trong t&ecirc;n biến.</li> <li>T&ecirc;n biến kh&ocirc;ng phải l&agrave; bất kỳ từ hoặc từ kh&oacute;a d&agrave;nh ri&ecirc;ng như int, float, vv.</li> </ul> <p><strong>T&ecirc;n biến hợp lệ</strong>:</p> <table width="764"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> </td> <td width="728"> <p>int tek;</p> <p>int _tek4;</p> <p>int tek4;</p> </td> </tr> </tbody> </table> <p><strong>T&ecirc;n biến kh&ocirc;ng hợp lệ</strong>:</p> <table width="764"> <tbody> <tr> <td> <p>1</p> <p>2</p> <p>3</p> </td> <td width="728"> <p>int 2;</p> <p>int hello tek;</p> <p>int long;</p> </td> </tr> </tbody> </table> <h3>2.2 C&aacute;c kiểu biến trong C</h3> <h4>Biến cục bộ (local)</h4> <p>Một biến được khai b&aacute;o b&ecirc;n trong một h&agrave;m hoặc một khối lệnh được gọi l&agrave; biến cục bộ</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">void function1() { &nbsp;&nbsp;&nbsp;&nbsp;int x = 10; // biến cục bộ }</pre> <h4>Biến to&agrave;n cục (global)</h4> <p>Một biến được khai b&aacute;o b&ecirc;n tr&ecirc;n trước khi bắt đầu h&agrave;m main được gọi l&agrave; biến to&agrave;n cục. Bất kỳ h&agrave;m n&agrave;o cũng c&oacute; thể thay đổi gi&aacute; trị của biến to&agrave;n cục.</p> <p>Trong v&iacute; dụ dưới đ&acirc;y, biến a l&agrave; biến to&agrave;n cục</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">int a = 20; // biến to&agrave;n cục void main() { &nbsp;&nbsp;&nbsp;&nbsp;int x = 10; // biến cục bộ }</pre> <h4>Biến tĩnh (static)</h4> <p>Một biến được khai b&aacute;o k&egrave;m với từ kh&oacute;a <strong>static</strong>&nbsp;được gọi l&agrave; biến tĩnh.</p> <p>Gi&aacute; trị của biến tĩnh được giữ lại sau mỗi lần khai b&aacute;o lại ( gọi h&agrave;m c&oacute; khai b&aacute;o biến nhiều lần)</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">#include &lt;stdio.h&gt; void aa(); int main() { &nbsp;&nbsp;&nbsp;&nbsp;aa(); &nbsp;&nbsp;&nbsp; aa(); &nbsp;&nbsp;&nbsp;&nbsp;aa(); &nbsp;&nbsp;&nbsp;&nbsp;return 0; } void aa() { &nbsp;&nbsp;&nbsp;&nbsp;int x = 10; // biến cục bộ &nbsp;&nbsp;&nbsp;&nbsp;static int y = 10; // biến static &nbsp;&nbsp;&nbsp;&nbsp;x = x + 1; &nbsp;&nbsp;&nbsp;&nbsp;y = y + 1; &nbsp;&nbsp;&nbsp;&nbsp;printf("\n %d, %d", x, y); }</pre> <p>&nbsp;</p> <p>Kết quả:</p> <p>11, 11</p> <p>11, 12</p> <p>11, 13</p> <p><img class="alignnone wp-image-7649 size-full" src="https://tek4.vn/wp-content/uploads/2021/01/bienstatic.png" alt="" width="937" height="427" /></p> <p>H&agrave;m aa() được gọi 3 lần, <strong>biến cục bộ x sẽ in c&ugrave;ng một gi&aacute; trị</strong>&nbsp;cho mỗi lệnh chức năng gọi l&agrave; 11, 11, 11. Nhưng&nbsp;<strong>biến static sẽ in gi&aacute; trị được tăng l&ecirc;n 1</strong>&nbsp;trong mỗi lần gọi h&agrave;m l&agrave; 11, 12, 13.</p> <ol start="4"> <li>Biến external.</li> </ol> <p>Ch&uacute;ng ta c&oacute; thể chia sẻ một biến trong nhiều tập tin m&atilde; nguồn C bằng c&aacute;ch sử dụng biến external. Để khai b&aacute;o biến b&ecirc;n ngo&agrave;i, bạn cần sử dụng từ kh&oacute;a extern. Biến External thường được khai b&aacute;o trong c&aacute;c file header (.h) v&agrave; sử dụng nhiều trong c&aacute;c bộ thư viện. Nếu bạn c&oacute; &yacute; định lập một bộ thư viện cho ri&ecirc;ng m&igrave;nh th&igrave; biến n&agrave;y bạn n&ecirc;n học v&agrave; nghi&ecirc;n cứu.</p> <p>V&iacute; dụ ch&uacute;ng ta khai b&aacute;o một header file c&oacute; t&ecirc;n myfile.h v&agrave; c&oacute; biến extern x =</p> <p>File: myfile.h</p> <table width="764"> <tbody> <tr> <td>1</td> <td width="728">extern int x = 2021; // bien external</td> </tr> </tbody> </table> <p>File: test.c</p> <pre class="EnlighterJSRAW" data-enlighter-language="c">#include "myfile.h"&nbsp; #include &lt;stdio.h&gt; int main() { printValue(); } int printValue() { printf("x: %d", x); }</pre> <p>Kết quả:</p> <p>x = 10</p> <p><img class="alignnone wp-image-7650 size-full" src="https://tek4.vn/wp-content/uploads/2021/01/bienextern.png" alt="" width="660" height="192" /></p> <p>Ở đ&acirc;y bạn đ&atilde; nghỉ ra &yacute; tưởng cho c&aacute;c bộ thư viện d&agrave;nh ri&ecirc;ng cho m&igrave;nh chưa. C&ugrave;ng đọc hết kh&oacute;a học nh&eacute; để ho&agrave;n thiện kiến thức v&agrave; lập cho m&igrave;nh một bộ thư viện ri&ecirc;ng nh&eacute;.</p> <p>Ch&uacute;ng ta sẽ kết th&uacute;c &ldquo;[Lập tr&igrave;nh C từ 0 đến 1] B&agrave;i 7. Biến trong C v&agrave; c&aacute;c vấn đề li&ecirc;n quan&rdquo; trong series [Lập tr&igrave;nh C từ 0 đến 1] ở đ&acirc;y. H&atilde;y c&ugrave;ng đ&oacute;n xem &ldquo;B&agrave;i 8. V&agrave;o ra dữ liệu&rdquo;.</p> <p>H&atilde;y để lại b&igrave;nh luận v&agrave; theo d&otilde;i series b&agrave;i viết: &ldquo;<a href="https://tek4.vn/tu-khoa/lap-trinh-c-tu-0-den-1/">Lập tr&igrave;nh C từ 0 đến 1</a>&rdquo; để tiếp tục cập nhật những th&ocirc;ng tin mới nhất.</p> <div class="pageviews-wrapper">&nbsp;</div>