2

这两个是等价的吗?

int a=10;
int *p=a; 

AND

int a=10;
int *p;
p=&a;

在这两种情况下 p 都持有 a 的地址吗!?

4

5 回答 5

5

在第一种情况下, 的值a被复制到p(其中存储了一个地址),因此p指向地址 10。

在第二种情况下,p指向 的地址a

还有第三种情况:

int a = 10;
int *p = malloc(sizeof(int));
*p = 10;

在这种情况下, 的值被复制到(由 保留)a所指向的地址中pmalloc()

于 2012-08-30T19:35:55.977 回答
3

在第一种情况下

int a=10;
int *p=a;

将变量 a 中包含的值放入变量 p 中。所以变量 p 的值为 10。

在第二种情况下

int a=10;
int *p;
p=&a;

变量a的值为10,变量p的值为a的地址。

在第一种情况下,即使变量 p 被声明为指向 int 的指针,放入变量 p 的值也是变量 a 的值,值为 10。在第二种情况下,您将放入变量的地址a 到变量 p 中。

于 2012-08-30T19:40:58.860 回答
2

只有第二种情况在技术上是正确的。在第一种情况下,您将of的a分配给 `p˙,因此您将整数分配给指针 - 它可能有效,但并非必须如此。

在第二种情况下,您正确地将ato的地址p,即 an分配int *给一个int变量 - 这很好。

请注意,即使将变量声明为指针,编译器也不会自动获取右侧表达式的地址(因为在某些情况下它根本没有意义,例如使用指针文字...... )

于 2012-08-30T19:39:47.167 回答
2

尝试:

int main()
{
    int a=10;
    int *p=a; 
}

然后编译:

> g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:4: error: invalid conversion from ‘int’ to ‘int*’

所以不是有效的 C++,因为 a 不是指针。C 在类型信息上稍微宽松一点将允许这样做。但你确实得到了你所要求的。的值pa(10)的值。指向地址 10 的指针也是如此p(这是否是有效地址是实现定义的)。

第二个版本在两种语言中都有效。
因为您获取了 的地址,a因此类型对于分配给 . 是正确的p。结果是p指向a

于 2012-08-30T19:52:02.033 回答
0

第一种情况不正确,因为指针应该有一些地址指向,然后值应该去那个地址。在第一种情况下,值转到未指向的地址,因此出现错误。

In the Second case the pointer starts pointing at the variable's address in the start. Hence it points to the address containing the value which is correct.

于 2012-08-31T16:13:09.713 回答