或者地址 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)