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 đỡ

*grab popcorn* viết 19:30 ngày 30/09/2018
cout <<d<<";"; return d;
cout << func(a + func(d))<<endl;

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.

Nguyễn Khương Duy viết 19:27 ngày 30/09/2018

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 đỡ

Minh Hoàng viết 19:37 ngày 30/09/2018

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.

Nguyễn Khương Duy viết 19:40 ngày 30/09/2018

ý 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)

Minh Hoàng viết 19:36 ngày 30/09/2018

trong lần gọi hàm sau func(a+16) thì d=16 chứ không phải 15 nữa

Bài liên quan
0