30/09/2018, 17:23
[c++] nhờ chạy code
có một cái code như thế này
#include <iostream>
using namespace std;
int d=1;
int func(int p)
{
static int d=15;
d += p;
cout <<d<<";";
return d;
}
void main()
{
int a=4;
cout << func(a + func(d))<<endl;
system("pause");
}
theo em phân tích thì đầu tiên cout << func(a + func(d))<<endl;
thì chạy cái func(d)
trước, thì in ra kết quả là 16
, lúc này d=16.
sau đó func(a + func(d))
có nghĩa là func(4 +16)
tức là func(20)
thì chạy ra kết quả là d+=p
thì d= 20 +15 = 35
vậy xuất ra màng hình sẽ là 16;35
. sao em test trên máy lại là 16;36;36
. nhờ mọi người giúp đỡ
Bài liên quan
3 lần đúng rồi bạn.
Bạn gọi hàm func 2 lần -> in ra 2 lần trong hàm
Rồi bạn in thêm ở ngoài 1 lần nữa, o,o
Bạn thay return d = return 0 sẽ thấy.
Như vậy là 16;35;35 chứ , sao lại 16;36;36 . còn chỗ này chưa hiểu, mong giúp đỡ
36 đúng rồi đó bạn, do có biến static ở bên trong hàm. sau khi gọi
func(d)
thìstatic int d
đã tăng lên 16 rồi. Bạn xem thêm về biến static nhé. Ở đây, nó tương đương với biến cục bộ nhưng chỉ được sử dụng trong hàm func.ý bạn là sau static int d=15; có lệnh d+=p; thì lúc đó nó tự gán cho d = d+p luôn ak (16)
trong lần gọi hàm sau
func(a+16)
thì d=16 chứ không phải 15 nữa