或者地址 a 是否等于 b 引用的整数?
还是会发生其他事情?
编辑:另外,如果 double *a = 3.0,是否指向 3.0?
如果代码是,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++ 语言都禁止使用非指针值初始化指针(空指针常量除外)。这立即意味着double *a = 3.0
不是有效的 C 或 C++ 代码。它根本不会编译。再举一个例子,这同样适用于int *a = 5
代码。
在 C 和 C++ 中,为了将非指针值转换为指针类型,您需要显式转换。这种转换的结果是实现定义的。
*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;
}
输出:
&val = 0xbfb652d4; b = 0xbfb652d4, a = 0x5
(地址值可能会改变)
a
实际上,将是一个具有指向的值的指针b
。除非b
本身是一个指向指针的指针,a
否则可能会指向一个无效的位置。
指针是任何变量的引用,并在其中存储其他变量的位置...您的示例应如下所示:
双a=3.0;诠释 b*=a;
所以指针 (B) 将引用值为 3.0 的变量 (A)