首先,我为我可怜的英语感到抱歉,这不是我的第一语言。设置地址并初始化指针
这是我第一次研究指针,我发现它真的很奇怪。
我正在阅读的书说*
marker表示'pa'表示的变量。
但是当我尝试并初始化一个指针
int a;
int *pA =&a;
(它们在这种情况下使用*pA
),然后改变它,
* PA =&一个;
不起作用,和
PA =&一个;
工程。
所以我的查询是“是否有初始化指针之间的任何区别,只是代??”
首先,我为我可怜的英语感到抱歉,这不是我的第一语言。设置地址并初始化指针
这是我第一次研究指针,我发现它真的很奇怪。
我正在阅读的书说*
marker表示'pa'表示的变量。
但是当我尝试并初始化一个指针
int a;
int *pA =&a;
(它们在这种情况下使用*pA
),然后改变它,
* PA =&一个;
不起作用,和
PA =&一个;
工程。
所以我的查询是“是否有初始化指针之间的任何区别,只是代??”
int a;
此堆栈
int* pA = &a;
这在栈上分配一个int指针并将其值,以指向上分配的整数。 '*'是声明的一部分。
*pA = &a;
在这种情况下,'*'是一个运算符,表示“看哪里pA点”,这是一个int。然后你试图将int设置为a的地址,这是不允许的。
pA = &a;
现在这与第二条语句相同。它将pA的值设置为指向a。
我也很好奇当我分配一个指针和一个变量。 > int a,* p1; < - 像这样 它工作!让我觉得'*'包含在指针中。 – Rhee 2009-11-11 11:29:02
这只是两个单独声明的简写。 *仍然是p1的声明(int *)的一部分。我同意这不完全直观,你只需要习惯它。在声明中,*是类型的一部分。作为一个操作员,它有不同的(但相关的)含义。 – 2009-11-11 14:25:42
当您创建一个指向您使用
int *pA;
之后,使用*pA
意味着你访问价值指向指针。
当您使用&a
时,您使用的是Address-of Operator,它返回存储变量a
(它是一个整数)的数据所存储的内存位置的地址。
因此,正确的作业是pA = &a
,因为您正在将地址a
复制到pA
,该地址应该保存内存位置的地址。
但*pA
代表该内存位置中的值(整数),因此将地址分配给*pA
不正确 - 这就是为什么正确的语法是pA = &a
。
是的,当你第一次声明一个指针时,你可以指定内存地址。因为您将它声明为指针,所以您使用*
运算符。但在其他地方,*pA
意味着采用该指针引用的值(而不是实际地址)。这有点奇怪,但你已经习惯了。因为,说,“让
*pA = &a;
:
所以,你可以这样做:
int a;
int *pA = &a;
,你可以这样做:
pA = &a;
但你不能做由pA
=指向值的值。“
但是,你可以这样做:
*pA = a;
这就是你是如何设置的值通过pA的指向。希望这有点清楚。
在C,“宣言模仿使用”。
在声明指针int
int *pa;
你可以看到,pa
是int *
或*pa
是int
。
您可以将指针指向int到pa
,或者您可以将int指定为*pa
。
这就是为什么在上面的声明之后,下面的语句“工作”。
*pa = 42;
pa = &a;
在声明本身中,可以通过提供初始化值将其“转换”为定义。该定义适用于int*
类型的对象pa
,而不是*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` */
欢迎SO。 :) – BobbyShaftoe 2009-11-11 05:22:44
Ty,认为这个地方真棒,人们善良,聪明。 希望我可以像你们一样,然后我可以帮助在C领域有需要的人。 – Rhee 2009-11-11 05:26:22