Mảng kí tự và con trỏ

char my_name[] = "Le Tran Dat";
my_name[1] = 'E'; //=> "LE Tran Dat"

Điều này chứng tỏ mảng my_name được cấp phát bộ nhớ tại địa chỉ khác chuỗi hằng kí tự “Le Tran Dat”, việc khởi tạo mảng kí tự bằng một chuỗi hằng kí tự chỉ đơn giản là copy từng kí tự của chuỗi “Le Tran Dat” và đưa vào mảng.

đọc cái này của a đạt vẫn ch hiểu sao nó lại khác địa chỉ ạ
vd như mk khai báo int a=1
a=2
cout<< ra thì a vãn bằng 2 mà…lúc này ô nhớ của a=1 và lúc a=2 vẫn cùng ô nhớ ?? ai giải thích giúp e cái của a đạt ghi sao khác ô nhớ v ạ

địa chỉ của biến a ko thay đổi mà giá trị trong ô nhớ đó thay đổi thôi , nhưng ở C# hay java thì các kiểu nguyên thủy sẽ ko thể thay đổi giá trị trực tiếp như c đc

còn về cái mảng thì mình nghĩ cái biến my_name lúc này chỉ là 1 biến con trỏ và cái chuỗi “Le Tran Dat” là 1 literal được tạo ở 1 vùng khác , bên java thì nó cũng có kiểu string pool để tạo các chuỗi literal rồi cho tham chiếu đến

tức là biến a là biến thường , my_name là 1 con trỏ nên nó chỉ chứa địa chỉ vùng nhớ

Khi bạn trích dẫn lời người khác, hãy dùng markup trích dẫn :smiley: aka >

Nó ntn, bạn ko thể gán vào một literal string "Le Tran Dat" nên my_name không thể là literal string, vì nó gán được. Vậy my_name với "Le Tran Dat" là khác nhau.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?