2011-01-17 37 views
8

não của tôi đã đi rất nhiều mờ chỉ thời gian gần đây và tôi có thể không cho cuộc sống của tôi nhớ tại sao đoạn code C sau:Làm thế nào bạn có thể đúc một mảng 2 chiều trong C?

char a[3][3] = { "123", "456", "789" }; 
char **b = a; 

Tạo cảnh báo sau đây:

warning: initialization from incompatible pointer type 

ai đó có thể xin vui lòng giải thích điều này cho tôi.

Cảm ơn bạn.

+2

Vui lòng lưu ý rằng "123" trong khai báo của bạn không còn là chuỗi nữa vì bạn đã cắt ngắn \ 0. "123" dưới dạng chuỗi chứa 4 ký tự, không phải là 3. – DReJ

Trả lời

10
char (*b)[3] = a; 

này tuyên bố b như một con trỏ đến char mảng kích thước 3. Lưu ý rằng điều này không giống như char *b[3], mà tuyên bố b như một mảng của 3 con trỏ char.

Cũng lưu ý rằng char *b = a là sai và vẫn phát ra cảnh báo giống như char **b = a.

+0

+1: Câu trả lời hữu ích nhất từ ​​trước tới nay. –

-1

a vẫn là một con trỏ đến một char:

char* b = a; 
+0

Yup. Rõ ràng là quá muộn vào ban đêm để tôi viết mã. – stretchkiwi

+0

Cảm ơn bạn đã trả lời. – stretchkiwi

+5

Điều này không chính xác. 'a' phân rã thành con trỏ thành phần tử đầu tiên của nó; 'a' là một mảng' char [3] '; một con trỏ tới phần tử đầu tiên của nó có kiểu 'char (*) [3]' không 'char *'. Việc khởi tạo con trỏ này tạo ra chính xác cảnh báo kiểu con trỏ không tương thích giống như mã ban đầu. –

0

Đó là đúng. a là một con trỏ.

char *b xác định con trỏ thành char.

char **b xác định con trỏ trỏ tới con trỏ.

+1

'a' không phải là một con trỏ; 'a' là một mảng. Một tuyên bố không đủ tiêu chuẩn nói rằng 'a' là một con trỏ không chính xác. –

+0

Ok. Để được chính xác, bạn là đúng. – NoviceCai

0

vấn đề là ** không được phân bổ tĩnh.

bạn có thể thực hiện phiên bản đơn giản này như sau:

char a[3][3] = {"123", "456", "789"}; 
char *b[3] = {a[0], a[1], a[2]}; 
1

Hãy thử điều này,

char a[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9' }}; 
    char *b = &a[0][0]; 

Kể từ khi, a là mảng nhân vật của mảng bạn cần phải khởi tạo chúng như là một nhân vật.

Các vấn đề liên quan