或者地址a是否等于b引用的整数?
或者其他事情会发生吗?
编辑:另外,如果double * a = 3.0,是否指向3.0?
答案 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