2011-07-10 11 views
0

は、私は、次の変数考えてみましょう:私はcharの配列へのポインタを反復処理することができます知っているポインタへのポインタを反復処理するにはどうすればよいですか?

char c[] = "ABC"; 
char *ptr = &c; 
char **ptr2 = &ptr; 

を、この方法:私はへのポインタを反復処理するにはどうすればよい

int i; 
for(i=0; i<3; i++){ 
    printf("TEST******************, %c\n", ptr[i]); 
} 

ポインタ?私はあなたの質問を誤解していない場合は

+1

ちょうどFYIれる: '&C '[4]'(4つの文字の配列へのポインタ)タイプ 'CHAR(*)の値である:' C '' ptr =&c; 'の式の最初の要素へのポインタには崩壊しません。あなたのコンパイラは、割り当ての互換性のない型について警告していたはずです... – pmg

答えて

3

を行う必要があります

int i; 
for(i=0; i<3; i++){ 
    printf("TEST******************, %c\n", (*ptr2)[i]); 
} 
1

、このコードはあなたの例のために仕事

printf("TEST******************, %c\n", (*ptr2)[i]); 
4

と仮定します。

6 char c[] = "ABC"; 
    7 
    8 char *ptr = &c; 
    9 char *ptr2 = ptr;  
10 char **ptr3 = &ptr; 

enter image description here

このシナリオでは:

  • ptrc
  • ptr2アドレスがptrのアドレスを表します。ポインタ
  • ptr3からポインタがptrに格納されているcのアドレスです。

**ptr3=&ptr意味 - 私が正しくあなたの質問を理解している場合は、ポインタへのポインタを使用する必要がptr3

に(対処しない)、ptrのアドレスを取るの内側を見て、その値を割り当てます。ptr2私の例では代わりに

ptr2[0] = A 
ptr2[1] = B 
ptr2[2] = C 

の場合:その場合はptr3

の、次のような要素にアクセスすることができます次のレコードは同じ結果を返します。それを試してみてください。

12 printf ("===>>> %x\n", ptr2); 
13 printf ("===>>> %x\n", *ptr3); 

参考こだわり議論は、here