Bởi vì n được định nghĩa const, bộ biên dịch có thể tạo và dùng bản sao của n. Bộ biên dịch không thể làm thế với x, bởi vì x chỉ được khai báo (chứ không được định nghĩa) const.
Mình có code sau
Thay đổi biến const x thì được, thay đổi biến const n lại không đượcC++ Code:
#include <iostream> void change(const int & x) { int *y = (int*)&x; *y = 17; } int main(int argc, char *argv[]) { const int n = 5; int *m = (int*) &n; *m = 7; int x = 13; change(x); } /*kết quả là 0x7fd24dffcc 5 # 0x7fd24dffcc 7 13 0x7fd24dffbc, 17 # 0x7fd24dffbc, 17 17 [Program finished] */
Có ai có thể giải thích tại sao không?
Mình dùng tbd cxxdroid
Bởi vì n được định nghĩa const, bộ biên dịch có thể tạo và dùng bản sao của n. Bộ biên dịch không thể làm thế với x, bởi vì x chỉ được khai báo (chứ không được định nghĩa) const.
-...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.
Mình hơi hơi hiểu rồi
Mình sửa dòng 16, trong main, thành "const int x = 13;" thì không thay đổi x được
Cảm ơn bạn.C++ Code:
#include <iostream> void change(const int & x) { int *y = (int*)&x; *y = 11; } int main(int argc, char *argv[]) { const int n = 5; int *m = (int*) &n; *m = 7; const int x = 13; change(x); } /*kết quả là 0x7fcfa3520c 5 # 0x7fcfa3520c 7 0x7fcfa351fc$ 13 0x7fcfa351fc, 11 # 0x7fcfa351fc, 11 0x7fcfa351fc$ 13 [Program finished]
Cùng một địa chỉ mà có giá trị khác nhau thì hơi khó hiểu nhỉ.
Ở mỗi thời điểm, mỗi biến chỉ có 1 giá trị. Vấn đề là giá trị được đọc ở thời điểm nào. Đôi khi nó không như ta tưởng.
-...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.