2016-06-23 65 views
6

tôi đã tạo ra một mảng const của con trỏ const như vậy:C++ con trỏ đến mảng const của con trỏ const

const char* const sessionList[] = { 
    dataTable0, 
    dataTable1, 
    dataTable2, 
    dataTable3 
}; 

cú pháp chính xác cho một con trỏ không const thường xuyên để mảng này là gì? Tôi nghĩ rằng nó sẽ là const char**, nhưng trình biên dịch nghĩ khác đi.

+0

Về mặt kỹ thuật, 'const char * *' sẽ tương đương với mảng của bạn, vì đây là mảng của bạn sẽ bị phân rã khi được truyền cho một hàm. Bạn sẽ cần thêm một con trỏ để lấy con trỏ tới mảng. Hoặc một cái gì đó như 'const char * [] *', nhưng tôi không chắc liệu cái đó có hợp lệ không? – KABoissonneault

+1

Dường như kiểu '& sessionList' là' const char * const (*) [4] ', nhưng tôi ' m đấu tranh để khai báo một biến với kiểu như vậy. – KABoissonneault

+0

Bạn sẽ làm rõ liệu bạn muốn một con trỏ tới một mảng hay một con trỏ tới một phần tử của một mảng. Hai thứ đó là những thứ khác nhau. – juanchopanza

Trả lời

3
const char* const sessionList[] = { ... }; 

được viết tốt hơn như:

char const* const sessionList[] = { ... }; 

Loại sessionList[0]char const* const.
Do đó, loại &sessionList[0]char const* const*.

Bạn có thể sử dụng:

char const* const* ptr = &sessionList[0]; 

hoặc

char const* const* ptr = sessionList; 

Đó khai báo một con trỏ đến các yếu tố của sessionList. Nếu bạn muốn khai báo một con trỏ cho toàn bộ mảng, nó cần phải là:

char const* const (*ptr)[4] = &sessionList; 
2

Các loại giống như bạn tuyên bố cho các phần tử mảng, với thêm một * thêm:

const char* const * 
+1

Nhưng đó không phải là một con trỏ đến mảng. – juanchopanza

+0

@juanchopanza: Đó là kiểu con trỏ có thể trỏ vào bất kỳ phần tử nào của mảng, thường là * ý nghĩa của từ con trỏ tới mảng - kiểu con trỏ mà tên mảng chuyển thành khi bạn sử dụng nó . –

6

Nếu bạn thực sự cần một con trỏ đến một mảng, như tiêu đề của bạn gợi ý, thì đây là cú pháp:

const char* const (*ptr)[4] = &sessionList; 
Các vấn đề liên quan