2011-06-03 42 views
6

này có lẽ là một điều cơ bản tầm thường, nhưng nó phần nào thoát khỏi tôi, cho đến nay ..incrementing một mảng của con trỏ trong C

char * a3[2];
a3[0] = "abc";
a3[1] = "def";
char ** p;
p = a3;

công trình này:

printf("%p - \"%s\"\n", p, *(++p));

này không:

printf("%p - \"%s\"\n", a3, *(++a3));

lỗi tôi nhận được ở biên soạn là:

vế trái yêu cầu như toán hạng increment

những gì tôi đang làm sai, tại sao và giải pháp cho 'a3' là gì?

+0

Biến a3 được khai báo là một mảng ký tự, tôi nghĩ bạn muốn khai báo nó như một mảng con trỏ, vì vậy nó nên đọc char * a3 [2] thay vì char a3 [2] – David

+0

đó là một lỗi sao chép qua mã, bạn là đúng, có, nó là một mảng con trỏ, cảm ơn bạn đã chỉ nó ra – XXL

Trả lời

4

a3 là một con trỏ không đổi, bạn không thể tăng nó. "p" tuy nhiên là một con trỏ chung để bắt đầu a3 có thể được tăng lên.

+0

này có vẻ là câu trả lời chính xác nhất, cảm ơn bạn – XXL

4

Bạn không thể chỉ định cho a3 hoặc bạn cũng có thể tăng số tiền đó. Tên mảng là một hằng số, nó không thể thay đổi được.

c-faq

+0

@ XXL Cách bạn khai báo nó, 'a3' không phải là một con trỏ, dấu chấm. Có thể bạn đang thiếu một '*' trong câu hỏi của bạn quá ('char * a3 [2]'?) – cnicutar

+0

nó bị thiếu dấu hoa thị do dán không thành công, những gì tôi muốn nghe là "tên mảng là hằng số, do đó nó không thể sửa đổi" - giải thích nó đủ tốt. bạn không có phần đó trong thư trả lời gốc của bạn, vì nó chỉ xuất hiện sau khi bạn đã chỉnh sửa bài đăng của mình - đó là lý do tại sao tôi đã hỏi một câu hỏi tiếp theo về "tại sao". dù sao, nó đã được giải quyết bởi bây giờ, nhờ – XXL

0

Hãy thử

char *a3Ptr = a3; 
printf("%p - \"%s\"\n", a3, *(++a3Ptr)); 

Trong C, một mảng char [] là khác nhau từ char *, ngay cả khi bạn có thể sử dụng một char * để tham khảo các vị trí đầu tiên của một mảng của char.

không phải là con trỏ "p" và "a3" đối với con trỏ?

Có nhưng a3 là hằng số. Bạn không thể sửa đổi nó.

0

a3 là tên của một mảng. Điều này về nó như là một con trỏ liên tục.

Bạn không thể thay đổi. Bạn có thể sử dụng a3 + 1 thay vì ++a3.

Một vấn đề khác là sử dụng "%s" cho đối số *(++a3). Vì a3 là mảng char, *a3 là ký tự và trình định dạng định dạng thích hợp phải là %c.

+0

a3 là một mảng char * để cú pháp nên được ok ... Tôi hiểu sai nó lúc đầu quá ... hoặc có thể nó đã được chỉnh sửa sau khi bạn đăng này. – Pablitorun

0

Bạn không thể tăng hoặc trỏ bất kỳ mảng char nào khác sau khi tạo. Bạn cần phải sửa đổi hoặc truy cập bằng cách sử dụng chỉ mục. like a[1]

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