30/09/2018, 16:15

Về bản chất, tại sao giá trị của static được giữ nguyên trong hàm?

Như topic Thảo luận về static variables và register variables đã nói về static, dưới đây là hai posts giải thích về vấn đề đó

Static variable cũng như automatic variable là chỉ hoạt động trong 1 function nào đó thôi, nhưng khác ở điểm là auto variable khi thoát ra function thì hoàn toan bị xóa = > mất giá trị của variable, khai báo static thì khi bạn gọi function đó 1 lần nữa thì giá trị i ở lần gọi trước vẫn giữ nguyên, Trong trường hơp này nếu dùng auto variable thì giá trị sẽ trở lại là như ban đầu. Có cái ví dụ cho dễ hình dung smile #include <stdio.h> int times_called(void); main() { int i; for (i = 0; i < 10;…

Câu này Đạt đính chính lại một chút. Static là một từ khóa dễ gây hiểu nhầm trong C và C++. Ở đây ta chỉ nên bàn về C. Thì static có 2 cách dùng. @mrmike612 đã nói cách thứ nhất là khai báo trong 1 function. Cách dùng thứ 2 là khai báo ở ngoài 1 function. Khi đó biến này thuộc về file scope tức là chỉ tồn tại trong file đó thôi, không đem ra sử dụng file khác được, nếu bạn cố sử dụng extern thì compiler sẽ báo lỗi. Giá trị cũng không bị mất đi giống như khai báo trong một function. Việc …

Tuy nhiên, mình còn thắc mắc về bản chất của static, tại sao giá trị của nó có thể tồn tại được và ko mất đi?

Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018

Cả nhà cho mình hỏi “bản chất” của từ khóa Static

Static variable cũng như automatic variable là chỉ hoạt động trong 1 function nào đó thôi, nhưng khác ở điểm là auto variable khi thoát ra function thì hoàn toan bị xóa = > mất giá trị của variable, khai báo static thì khi bạn gọi function đó 1 lần nữa thì giá trị i ở lần gọi trước vẫn giữ nguyên, Trong trường hơp này nếu dùng auto variable thì giá trị sẽ trở lại là như ban đầu. Có cái ví dụ cho dễ hình dung smile #include <stdio.h> int times_called(void); main() { int i; for (i = 0; i < 10;…

Câu này Đạt đính chính lại một chút. Static là một từ khóa dễ gây hiểu nhầm trong C và C++. Ở đây ta chỉ nên bàn về C. Thì static có 2 cách dùng. @mrmike612 đã nói cách thứ nhất là khai báo trong 1 function. Cách dùng thứ 2 là khai báo ở ngoài 1 function. Khi đó biến này thuộc về file scope tức là chỉ tồn tại trong file đó thôi, không đem ra sử dụng file khác được, nếu bạn cố sử dụng extern thì compiler sẽ báo lỗi. Giá trị cũng không bị mất đi giống như khai báo trong một function. Việc …

Còn volatile thì chờ cao thủ vào điểm danh

P/S: Hình như @dinhtan vẫn còn thắc mắc chỗ static?

tan viết 18:15 ngày 30/09/2018

Vâng em quên ko nói rõ ở đây ta chỉ xét với C, nhưng hình như cái mà anh @ltd nói chỉ là biểu hiện hay gọi là tác dụng của nó thì phải , cái đó em biết nhưng em muốn biết tại sao Static lại làm được như thế và nó làm như thế nào ?
Theo em nghĩ nó liên quan đến các vùng nhớ, còn liên quan thế nào mọi người vào giải đáp ^^~

Nguyễn Minh Dũng viết 18:30 ngày 30/09/2018

Vâng em quên ko nói rõ ở đây ta chỉ xét với C, nhưng hình như cái mà anh @ltd nói chỉ là biểu hiện hay gọi là tác dụng của nó thì phải

Anh đã sửa câu hỏi lại, anh bỏ volatile đi, em đặt câu hỏi tương tự vào một topic khác, anh sẽ trả lời.

Về vấn đề static, em đã đúng ở một điểm.

Theo em nghĩ nó liên quan đến các vùng nhớ

Còn liên quan thế nào thì em phải hiểu là trong C. Các biến đều được coi là biến auto. Tức là biến tự động. Vùng nhớ của nó được tạo ra khi vào một hàm, và hủy đi khi kết thúc hàm.

Anh chưa làm về biến static, anh đã có kế hoạch làm, nhưng vì bệnh đau họng không nói được. Nên anh sẽ cập nhật sớm thôi.

Nói ngắn gọn, vùng nhớ cho biến static được cấp vĩnh viễn cho đến khi hủy chương trình. Khác với auto, vùng nhớ bị hủy ngay khi ra khỏi hàm. Đó là lý do tại sao static có thể giữ được giá trị.


P/S: Trong các bạn ở diễn đàn, có nhiều bạn hoạt động tích cực, các bạn sẽ sớm lên Level 3. Khi lên Level 3, các bạn hãy giúp Đạt sửa các câu hỏi lại sao cho phù hợp với nội dung topic.

Cảm ơn các bạn, có các bạn, chúng ta sẽ xây dựng được một cộng đồng học tập / thảo luận một cách thông minh hơn.

tan viết 18:28 ngày 30/09/2018

Hi vâng em cảm ơn anh,hy vọng video của anh ra sớm

Bài liên quan
0