双指针的定义

时间:2016-03-06 03:12:24

标签: c pointers

我正在学习C编程,我看过一些人们使用双指针的代码。我从下面搜索了stackoverflow,但仍然有一个小问题(Why use double pointer? or Why use pointers to pointers?

在下面的代码中,我的问题是我没有将'b'定义为** b。现在 当我尝试做(* b)我收到编译错误。这个*(* b)不一样 *(c的地址)因为'a'的地址为'c'。为什么我需要将'b'定义为** b才能真正得到'c'的值?

#include <stdio.h>

int main()
{
    int *a, *b, c;
    c = 10;
    a = &c;
    b = &a;
    printf("*a - %d\n *(*b): %d\n," , *a, *(*b));
    return 0;
}

非常感谢帮助/解释:)

编辑:非常感谢你们的解释。事情现在很清楚:)

3 个答案:

答案 0 :(得分:0)

这是一个有效的代码。

int main()
{
int *a, *b, c;
c=10;
a = &c;
b = a;
printf("*a - %d\n *(*b): %d\n,",*a, *(b));
return 0;
}
  

指针恰当地命名:它们“指向”记忆中的位置。

当您编写*b时,您告诉编译器您将声明一个类型为integer的指针,以便它指向一个整数。 当您使用b = a时,您告诉编译器您也将c的地址分配给a。实际上,b是指针变量本身,它存储整数变量c的地址。因此,这样,您也可以将一个变量的地址分配给另一个指针。

现在,关于你的代码,

int main()
{
int *a, **b, c; // just change it from *b to **b
c = 10;
a = &c;
b = &a;
printf("*a - %d\n *(*b): %d\n,",*a, *(*b));
return 0;
}

您需要通过编写2 *来指定编译器指针b是指针变量的指针。当您编写**b时,您告诉编译器你指向另一个指针变量。同样,您也可以使用三重指针和四重指针。
这是一个供您参考的链接。 http://www.c4learn.com/c-programming/c-double-pointer/

答案 1 :(得分:0)

您可以使用c访问*b的值..更改您的代码littlebit ..

    #include <stdio.h> 
    int main() 
    {
         int *a, *b, c; 
         c = 10; 
         a = &c; 
         b = a; 
         printf("*a :%d\n *b: %d\n,",*a, *b);
          return 0;
     }


*b,*a

定义ab是两个指针变量..

a=&c; 

在指针c中指定变量a的地址。&代表 运算符的地址。

b=a;

复制ab的内容。现在b也包含c的地址..

打印*a*b .. *a*b表示包含ab。因此*a*b会打印c ..

的值

您也可以使用**b .. **b表示b是一个存储另一个指针变量地址的指针。

在这种情况下,代码将是,

#include <stdio.h> 
  int main() 
  {
        int *a, *b, c; 
        c = 10; 
        a = &c; 
        b = &a; 
        printf("*a :%d\n *b: %d\n,",*a, *(*b));
        return 0;
      }

a包含c的地址,b包含a的地址..因此,*a将打印c的值。

由于b是双指针,我们需要*(*b)来访问b的包含.. *(*b)还会打印c的值。

答案 2 :(得分:0)

在您的代码中,您必须执行int **b;,因为:

apointer-to-integer,因为a = &c

bpointer-to-(pointer-to-integer),因为您撰写了b = &a