01/10/2018, 16:03
Tại sao C không cho phép gán 2 xâu ký tự hoặc 2 mảng (kể cả cùng kích thước) nhưng lại cho phép gán 2 biến cấu trúc mặc dù trong đó có các trường là xâu ký tự hay mảng?
mọi người cho em hỏi: tại sao C không cho phép gán 2 xâu ký tự hoặc 2 mảng(kể cả cùng kích thước) nhưng lại cho phép gán 2 biến cấu trúc mặc dù trong đó có các trường là xâu ký tự hay mảng… ? Tại sao C lại làm như vậy
Bài liên quan
2 posts were merged into an existing topic: Topic chứa các reply được cho là off-topic - version 2
Chưa rõ câu hỏi của bạn.
Đa số trương hợp liên quan đến việc cố gắng gán 1 mảng này bằng 1 mảng kia la do chưa hiểu rõ về quản lý object trong bộ nhớ của c.
1 struct thì khác. a khi bạn tạo ra nó xem như là 1 object được tạo ra cái object đó được quản lý bởi 1 ai đó và toàn quyền truy cập đông thời thay đổi nó. Vì nguyên vùng nhớ đó
Là của bạn. Nhưng mảng thì khác nó chỉ quan tâm con trỏ đầu mảng… xâu chuỗi cũng vậy. Nó ko quản lý cả mảng đó.
Viêt trên điên thoại nên ko đưa eg được.
cảm ơn anh. em đã hiểu phần ko thể gán mảng. Nhưng câu hỏi tại sao C lại làm nhu vậy thì e cũng ko hiểu ạ
. đây là 1 câu hỏi bài tập thầy em giao về.
tại vì C ko cho phép. Mảng có thể coi như là 1 hằng giá trị (ko phải hằng con trỏ mà là hằng giá trị), chỉ thay đổi những phần tử mà nó chứa, bản thân nó ko thay đổi được. Gán
x = ...
thì bản thânx
phải thay đổi được. Nếux
là mảng thìx
ko thay đổi đc nên nó sẽ báo lỗi. Gánx[i]
thì có thể được nếux[i]
ko phải là mảng.http://en.cppreference.com/w/c/language/operator_assignment
(ở đây lhs = left hand side nghĩa là vế trái, rhs = right hand side = vế phải)
kiểu rhs giống kiểu lhs chỉ là yêu cầu thứ hai (cho rhs) trong phép gán lhs = rhs, yêu cầu thứ nhất (cho lhs) là lhs phải là đối tượng thay đổi được (modifiable lvalue).
http://en.cppreference.com/w/c/language/value_category
trong định nghĩa của “Modifiable lvalue expressions” thì có ghi rõ nó ko phải là kiểu array => ko gán lhs = rhs được nếu lhs là array. Luật nó thế @@ Còn với struct/union thì nó cho phép với điều kiện ko có thành viên nào trong struct/union đó là hằng (đương nhiên rồi @@)