01/10/2018, 14:24

Con trỏ và std::string

Em có một số thắc mắc về con trỏ ạ.

Em thử viết một đoạn code về con trỏ.

int main()
{
    string texts[]={"one","two","three"};

    string *texts_ptr=texts; 

    string *element_ptr=&texts[0];
    string *end_ptr=&texts[2];

    return 0;
}

Em không hiểu tại sao em đặt *texts_ptr=texts được, nhưng tại sao khi đặt *element_ptr bằng 1 phần tử:
*element_ptr=&texts[0], em phải dùng dầu & để chỉ địa chỉ ạ?

Em nghĩ khi đặt string *end_ptr=texts[0], ta đã mặc định end_ptr trỏ đến địa chỉ của phần tử đầu tiên của texts.

Em cảm ơn nhiều lắm.

rogp10 viết 16:39 ngày 01/10/2018

Em nghĩ khi đặt string *end_ptr=texts[0], ta đã mặc định end_ptr trỏ đến địa chỉ của phần tử đầu tiên của texts.

texts[0] là string, không phải địa chỉ nên không gán được.

Thong Nguyen Thanh viết 16:29 ngày 01/10/2018

Cho em hỏi thêm như vậy em đặt một biến *x thì *x hay x là địa chỉ ạ?

rogp10 viết 16:26 ngày 01/10/2018

x là địa chỉ nhé bạn.

Thong Nguyen Thanh viết 16:30 ngày 01/10/2018

Theo em hiểu thì *x không phải là địa chỉ, tại sao em phải gán nó cho “&” texts[0] ạ?

Dark.Hades viết 16:29 ngày 01/10/2018

*x không là địa chỉ, nhưng std::string *x thì là địa chỉ.

Thong Nguyen Thanh viết 16:27 ngày 01/10/2018

Còn dòng string *texts_ptr=texts; thì sao ạ, có phải lúc này texts đã chỉ sẵn tới địa chỉ của texts[0], nên không cần thêm “&” phải không ạ?

rogp10 viết 16:26 ngày 01/10/2018

Đúng vậy, texts chính là địa chỉ của texts[0].

Thực ra với mảng bt thì &texts[i] = texts + i mà thôi.

Thong Nguyen Thanh viết 16:26 ngày 01/10/2018

Em chân thành cảm ơn mọi người

Bài liên quan
0