如果int * a = * b,是否指向b引用的对象?

时间:2012-11-04 17:08:40

标签: c++ c

或者地址a是否等于b引用的整数?

或者其他事情会发生吗?

编辑:另外,如果double * a = 3.0,是否指向3.0?

7 个答案:

答案 0 :(得分:4)

如果代码是int *a = *b;,则*b是指向整数的指针(必须与a的类型匹配)。这意味着b是指向整数的指针。然后,a将包含*b指向的地址,而不是b指向的地址。

但是,如果代码为int *a; *a = *b;,则表示不同。在这种情况下,您将b指向的对象复制到a指向的地址。该对象必须是整数,因此a将指向整数的副本(因此您可以更改*b并且*a不会更改)。顺便说一句,如果未初始化a,那将是未定义的行为(很可能是崩溃)。

答案 1 :(得分:1)

问题的第一部分没有意义,因为您没有提供有关b的信息。

至于第二部分(约double *a = 3.0)... C和C ++语言都禁止使用非指针值初始化指针(空指针常量除外)。这立即意味着double *a = 3.0不是有效的C或C ++代码。它根本不会编译。对于另一个例子,同样适用于int *a = 5代码。

在C和C ++中,为了将非指针值转换为指针类型,您需要显式转换。这种演员的结果是实现定义。

答案 2 :(得分:0)

*a = *b表示将地址为b的内存内容复制到地址为a

的内存中

if(* a == * b)表示:检查地址a的内存内容是否等于地址为b的内存内容

答案 3 :(得分:0)

  

如果int * a = * b,是否指向b引用的对象?

这取决于b是什么。

  

编辑:另外,如果double * a = 3.0,是否指向3.0?

不,这是一个无效的陈述。您应使用地址初始化a

答案 4 :(得分:0)

它必须给你警告......在没有演员的情况下将int转换为int * 它还取决于p

究竟是什么

答案 5 :(得分:0)

尝试以下方法:

#include <stdio.h>

int main(void)
{
    int val = 5;
    int *b = &val;
    int *a = *b;

    printf("&val = %p; b = %p, a = %p\n", &val, b, a);

    return 0;
}

输出:

&val = 0xbfb652d4; b = 0xbfb652d4, a = 0x5

(地址值可能会改变)

事实上,

a将成为b指向的值的指针。除非b本身是指向指针的指针,否则a可能会指向无效的位置。

答案 6 :(得分:0)

指针是任何变量的引用,并存储其他变量的位置...... 你的例子应该是:

双a = 3.0; int b * = a;

所以指针(B)将引用变量(A)的值为3.0