2011-07-10 66 views
0

可以說我有以下變量:如何迭代指針指針?

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

我知道我可以一個指針迭代到字符數組,這樣一來:

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

如何遍歷一個指向指針?

+1

僅有一個供參考:所述'&C'是類型'炭(*)[4]'(指針的4個字符陣列)的值:'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

在這種情況下:

  • ptr代表c
  • ptr2地址代表的ptr的地址。 甲指針的指針
  • ptr3存儲在ptr,這是c的地址。

**ptr3=&ptr意味着 - 取ptr地址,看看裏面,並指定其值(不是地址)ptr3

如果我明白你的問題正確,則需要使用指針的指針:在我的例子ptr2代替的ptr3

如果是這樣,你可以訪問相同的元素:

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

對於以下記錄將會得到相同的結果。嘗試一下。

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

供參考很好的討論是here