假设我有以下变量:
char c[] = "ABC";
char *ptr = &c;
char **ptr2 = &ptr;
我知道我可以通过这种方式迭代指向char数组的指针:
int i;
for(i=0; i<3; i++){
printf("TEST******************, %c\n", ptr[i]);
}
如何迭代指向指针的指针?
答案 0 :(得分:4)
假设:
6 char c[] = "ABC";
7
8 char *ptr = &c;
9 char *ptr2 = ptr;
10 char **ptr3 = &ptr;
在这种情况下:
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
答案 1 :(得分:3)
对于你的例子:
int i;
for(i=0; i<3; i++){
printf("TEST******************, %c\n", (*ptr2)[i]);
}
答案 2 :(得分:1)
如果我没有误解你的问题,这段代码就应该找到工作
printf("TEST******************, %c\n", (*ptr2)[i]);
答案 3 :(得分:1)
让我举个例子
char **str; // double pointer declaration
str = (char **)malloc(sizeof(char *)*2);
str[0]=(char *)"abcdefgh"; // or *str is also fine instead of str[0]
str[1]=(char *)"lmnopqrs";
while(*str!=NULL)
{
cout<<*str<<endl; // prints the string
str++;
}
free(str[0]);
free(str[1]);
free(str);
或您可以理解的另一个最佳示例。 在这里,我使用了2个for循环,因为我要遍历字符串数组的每个字符。
char **str = (char **)malloc(sizeof(char *)*3); // it allocates 8*3=24 Bytes
str[0]=(char *)"hello"; // 5 bytes
str[1]=(char *)"world"; // 5 bytes
// totally 10 bytes used out of 24 bytes allocated
while(*str!=NULL) // this while loop is for iterating over strings
{
while(**str!=NULL) // this loop is for iterating characters of each string
{
cout<<**str;
}
cout<<endl;
str++;
}
free(str[0]);
free(str[1]);
free(str);