Khi nào nên dùng biến static, live time của nó?

Mình muốn được giải thích thêm về biến static. Khi nào nên dùng biến static, live time của nó… Cảm ơn

Đạt nghĩ nên di chuyển sang đây thì dễ trả lời hơn.


Biến static, trong C/C++, có được tạo ra khi load chương trình vào ram và chỉ hủy khi hủy chương trình. Thời gian sống bằng thời gian sống của chương trình chính.

Khi nào dùng static, tùy, khi nào có nhu cầu giữ gía trị của biến thì mình dùng static thôi.

3 Likes

trong c# nếu muốn dùng 1 biến từ 1 class nào khác thì phải thêm static cho biến đó. trước học oop có nói biến tĩnh là gì mà lâu rồi quên
// lủng kiến thức nặng quá rồi.

1 Like

mình bổ sung thêm ý của bạn @ltd . Mình đã không còn dùng C/C++ lâu rồi nên chỉ đưa những ý dưới.
khi nào nên dùng static ?
theo mình nhớ thì khi biến đó được khai báo toàn cục, được sử dùng nhiều lần và giá trị biến có thể thay đổi nhiều lần thì nên dùng biến static.

1 Like

Đạt bổ sung cái này

Biến static có hai dạng: external linkage và internal linkage

  • external linkage: Khai báo ở ngoài mọi hàm
int handsome;
void chicken()
{
}
  • internal linkage: Khai báo trong hàm với từ khóa static
void chicken()
{
    static int num_egg = 3;
}
  • internal linkage: Khai báo ngoài hàm với từ khóa static
static int handsome; // chỉ được truy cập trong file hiện tại (hay compilation unit hiện tại)
void chicken()
{
}
2 Likes

2 cái internal linkage (khai báo trong và ngoài hàm với từ kháo static) giống nhau phải không anh? Nó có giống biến toàn cục không?

Không em, cái trong hàm chỉ “nhìn thấy” trong hàm đó. Còn cái ngoài hàm thì có thể nhìn thấy ở bất cứ đâu trong file đó. Ngoài file không thấy được, bởi vì ta dùng từ khóa static

2 Likes
#include<iostream>
using namespace std;

int kun(int p)
{
	static int x=15;
	x+=p;
	cout<<d<<endl;
	return d;
}
int main()
{
	int a=4;
	cout<<kun(a+kun(d));
	
}

anh đạt cho em hỏi biến static chỉ tạo 1 lần giá trị thôi hả anh (ý của em là sau lần gọi thứ 2 nó ko tạo lại x=15 nữa hả anh) em cảm ơn anh trước

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?