Tôi đang bối rối về các dòng mã sau đây:mảng của con trỏ đến char mảng
char* words[] = { "aaa", "bbbb", "ccccc", "dddddd" };
Con đường tôi hiểu, mỗi từ là lần đầu tiên lưu trữ và sau đó mỗi vị trí của các mảng words
sẽ chỉ sau đó đến đầu tiên tính cách của mỗi từ. Các chuỗi này được lưu trữ như thế nào? Có phân bổ động nào đang diễn ra ở đây hay những từ này được lưu trữ trên ngăn xếp không?
Nếu chúng được lưu trữ trên ngăn xếp, theo cách nào chúng được lưu trữ? Ví dụ, nếu tôi in một số nội dung của words
như sau:
#include <stdio.h>
int main() {
char* words[] = { "aaa", "bbbb", "ccccc", "dddddd" };
printf("\n\n(*words)[0] = %s", words[0]);
printf("\n\n(*words)[0]+1 = %s", words[0]+1);
return 0;
}
thay vì in aaa
và bbbb
, những gì tôi nhận được là aaa
và aa
. Tôi không thực sự hiểu lý do của việc này là gì, theo cách tôi nhìn thấy, words[0]+1
nên trỏ đến chuỗi bbbb
và không phải là ký tự thứ hai của aaa
. Chuyện gì đang xảy ra ở đây?
Bạn có nhầm lẫn 'từ [0] + 1', '(từ + 1) [0]' và 'từ [1]'? –
Thử '& words [0] + 1' – oldrinb