Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果int*a=*b,a会指向b引用的对象吗?_C++_C - Fatal编程技术网

C++ 如果int*a=*b,a会指向b引用的对象吗?

C++ 如果int*a=*b,a会指向b引用的对象吗?,c++,c,C++,C,或者地址a是否等于b引用的整数 还是会发生其他事情 编辑:另外,如果double*a=3.0,a是否指向3.0?*a=*b,这意味着将地址为b的内存内容复制到地址为a的内存中 if(*a==*b)这意味着:检查地址为a的内存内容是否等于地址为b的内存内容 如果int*a=*b,a会指向b引用的对象吗 这取决于b是什么 编辑:另外,如果double*a=3.0,是否会将点设置为3.0 不,这是一个无效的语句。您应使用地址初始化a 它必须给你警告。。。不使用强制转换将int转换为int* 这还取决于

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

还是会发生其他事情


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

*a=*b
,这意味着将地址为
b
的内存内容复制到地址为
a
的内存中

if(*a==*b)这意味着:检查地址为
a
的内存内容是否等于地址为
b
的内存内容

如果int*a=*b,a会指向b引用的对象吗

这取决于
b
是什么

编辑:另外,如果double*a=3.0,是否会将点设置为3.0


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

它必须给你警告。。。不使用强制转换将
int
转换为
int*
这还取决于什么是
p

请尝试以下操作:

#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;
}
(地址值可能会更改)


a
实际上是一个指针,其值是
b
指向的。除非
b
本身是指向指针的指针,
a
可能会指向无效位置。

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


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

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

至于第二部分(大约
double*a=3.0
)。。。C语言和C++语言都禁止用非指针值初始化指针(除了空指针常数)。这就意味着<代码>双*A=3 < /COD>不是有效的C或C++代码。它根本无法编译。例如,这同样适用于
int*a=5
code


<>在C和C++中,为了将非指针值转换为指针类型,需要一个显式的转换。此类强制转换的结果由实现定义。

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

双a=3.0; int b*=a


因此指针(B)将引用值为3.0的变量(A)

它将是标题中的变量,但
B
可能是
nullptr
或其他什么不应该编译。这个问题毫无意义。
int*a=*b
应该是什么意思?什么是
b
,它是从哪里来的?我从一本编程书中得到了这个例子,函数被传递了参数**b.@badatmath:重要的是
b
的类型<代码>**b
也没有说明它的类型。什么是完整的<代码> B<代码>?代码在C和C++中都无效。使用
*b
值初始化指针
int*a
是非法的,它具有
int
类型。它可能在语义上无效,但我编译并运行了它;甚至没有生成警告。这意味着您的编译器被故意设置为“非常松散”的语言一致性。我知道有些编译器会为这样的代码生成警告,虽然形式上已经足够了(这种语言需要诊断消息,任何诊断消息),但这种警告已经“松散”了。但是如果你的编译器根本没有生成任何消息。。。真奇怪。
&val = 0xbfb652d4; b = 0xbfb652d4, a = 0x5