30/09/2018, 19:25

Hỏi về từ khóa static

#include <iostream>
using namespace std;
void Input(char num1[], char num2[]);
void Output(char result[]);
void Insert(char s[], char kitu, int vitri);
char* Add(char num1[], char num2[]);
int main()
{
	char num1[100],
		 num2[100];
	Input(num1, num2);
	puts(Add(num1,num2));
	system("pause");
	return 0;
}
void Input(char num1[], char num2[])
{
	cout << "Nhap toan hang thu 1: ";
	gets(num1);
	cout << "Nhap toan hang thu 2: ";
	gets(num2);
}
void Output(char result[])
{
	cout << "Tong hai so la: ";
	puts(result);
}
char* Add(char num1[], char num2[])
{
	static char result[100] = "";
	while(strlen(num1) != strlen(num2))  // nếu độ dài hai chuỗi khác nhau thì thêm số 0 vào đầu chuỗi ngắn hơn để thuận cho việc cộng
	{
		if(strlen(num1) > strlen(num2))
			Insert(num2,'0',0);
		else
			Insert(num1,'0',0);
	}
	int nho = 0;
	for(int i = strlen(num1)-1; i >= 0; i--)
	{
		if(nho == 1)
			result[i] = (num1[i] - 48) + (num2[i] - 48) + 1;
		else
			result[i] = (num1[i] - 48) + (num2[i] - 48);
		if((result[i] >= 10))
		{
			result[i] -= 10;
			nho = 1;
			if(i == 0)
			{
				result[i] = result[i] + 48;		
				Insert(result,'1',0);
				break;
			}
		}
		
		result[i] = result[i] + 48;
	}
	
	puts(num1);
	puts(num2);
	return result;
}
void Insert(char s[], char kitu, int vitri)
{
	for(int i = strlen(s)+1; i > vitri ; i--)
 		s[i] = s[i-1];
	s[vitri] = kitu;
}
Hoàng Trần viết 21:40 ngày 30/09/2018

Cho minh hỏi trong hàm Add, phần khai báo mảng “result” thì tại sao khi có từ khóa static thì code chạy ra kết quả đúng, còn không có thì sai? Mn giải đáp giùm mình nhé.

... viết 21:27 ngày 30/09/2018

static trong trường hợp này bạn có thể hiểu như là biến toàn cục (chỉ trong trường hợp này thôi).
Bạn cần dùng mảng result ở bên ngoài hàm add nhưng không khai báo nó ở bên ngoài nên phải dùng static ở trong hàm Add cho nó thành biến toàn cục.

Bạn coi thêm phần phạm vi biến trong mấy bài C/C++ của anh Đạt.

Bài liên quan
0