代码之家  ›  专栏  ›  技术社区  ›  Rhee

设置地址和指针初始化

c
  •  4
  • Rhee  · 技术社区  · 16 年前

    首先,我为我糟糕的英语感到抱歉,这不是我的第一语言。

    这是我第一次研究指针,我发现有些东西很奇怪。

    我读的书上说 * 标记表示“pa”表示的变量。

    但是当我尝试初始化一个指针时

    int a;
    int *pA =&a;
    

    (他们用过 *pA 在这种情况下),然后改变它,

    *pa=&a;

    不起作用,而且

    pa=&a;

    作品。

    所以我的查询是“初始化指针和替换指针有什么区别吗?”

    4 回复  |  直到 16 年前
        1
  •  3
  •   Jim Garrison    16 年前
    int a;
    

    这将在堆栈上分配一个整数

    int* pA = &a;
    

    这将在堆栈上分配一个int指针,并将其值设置为指向a。“*”是声明的一部分。

    *pA = &a;
    

    在这种情况下,“*”是一个运算符,它表示“查找PA点的位置”,即一个int。然后您试图将该int设置为a的地址,这是不允许的。

    pA = &a;
    

    现在这和第二个声明是一样的。它将pa的值设置为指向a。

        2
  •  1
  •   pmg    16 年前

    在C中, “声明模仿使用” .

    当您声明指向 int

    int *pa;
    

    你可以看到 pa 是一个 int * 或者那个 *pa 是一个 int .

    可以将指向int的指针分配给 PA 或者您可以将ints分配给 *私人助理 .
    这就是为什么在上述声明之后,下面的声明是“有效的”。

    *pa = 42;
    pa = &a;
    

    在声明本身中,可以通过提供初始化值将其“转换”为定义。定义是针对对象的 私人助理 类型的 int* 不是为了 *PA .

    int *pa = &a; /* initialize pa, which takes a `int*` */
    pa = &b;      /* change `pa` with a different `int*` */
    *pa = 42;     /* change the value pointed to by `pa` */
    
        3
  •  0
  •   Jacob    16 年前

    创建指针时,使用

    int *pA;

    之后,使用 *pA 意味着你正在访问 指针指向的值 .

    当你使用 &a 您正在使用 Address-of Operator 返回存储变量数据的内存位置的地址。 a (整数)被存储。

    所以,正确的任务是 pA = &a 因为你复制了 pA 它应该保存内存位置的地址。

    但是 *PA 表示该内存位置中的值(整数),因此将地址分配给 *PA -这就是为什么正确的语法是 PA=A;A .

        4
  •  0
  •   BobbyShaftoe    16 年前

    是的,当您第一次声明指针时,可以指定内存地址。因为您将它声明为指针,所以使用 * 操作员。但在其他地方, *pA 表示获取该指针引用的值(而不是实际地址)。这有点奇怪,但你已经习惯了。

    所以,你可以这样做:

    int a; 
    int *pA = &a;
    

    你可以这样做:

    pA = &a;
    

    但你不能这样做:

    *pA = &a;
    

    因为这意味着 pA =到a的值。”

    但是,您可以这样做:

    *pA = a;
    

    这就是你如何设置PA所指的值,希望这有点清楚。