2013-04-13 39 views
7

Đến thẳng điểm,Làm thế nào để tạo một con trỏ trỏ tới bất kỳ phần tử mảng nào của một mảng 2D?

Tôi muốn con trỏ ký tự p trỏ đến phần tử mảng duy nhất chứa ký tự 'T'.

char a[100][100]; 
char *p; 

for(int i=0;i<4;i++) 
    for(int j=0;j<4;j++) 
    if(a[i][j] == 'T') 
     p = a[i][j]; 

P.S. Tôi đã thử với các kết hợp khác nhau của *, **, v.v ... nhưng không có gì có vẻ hoạt động.

+4

'a [i] [j]' là kiểu char nên '& a [i] [j]' là cách đơn giản nhớ ưu tiên '[]' cao hơn '&' để '& a [i] [j] 'là đúng mà không có'() '. bạn có muốn bất kỳ kỹ thuật nào khác không? hoặc bất kỳ điều gì khác –

+1

* "Tôi đã thử với các kết hợp khác nhau của' * ',' ** '" * - Có lẽ đã thử một số kết hợp của '&'. ;) –

Trả lời

10

Sử dụng địa chỉ của nó:

char a[100][100]; 
char *p; 

for(int i=0;i<4;i++) 
    for(int j=0;j<4;j++) 
    if(a[i][j] == 'T') 
     p = &a[i][j]; 

a[i][j] là loại charp là loại char *, nắm giữ một địa chỉ. Để lấy địa chỉ của một biến, hãy thêm nó vào với &.

Toán tử * trên con trỏ hoạt động theo cách khác. Nếu bạn muốn để có được những 'T' trở lại, bạn muốn sử dụng:

char theT = *p; 
-1

thay đổi nếu phần như sau

if(a[i][j] == 'T') { 
     p = (char *) &a[i][j]; 
     i = 4; break; 
    } 
5

có một cách khác để có được nó

char a[100][100]; 
char *p; 

for(int i=0;i<4;i++) 
    for(int j=0;j<4;j++) 
     if(a[i][j] == 'T') 
      p = a[i]+j; 

Bằng viết p = a[i]+j; bạn thực sự nói, Chúng tôi có một con trỏ tại việc ăn xin của một mảng gọi là a [i] và bạn trỏ đến vị trí là j lần từ việc ăn xin của mảng đó!

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