-1

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

还是会发生其他事情?

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

4

7 回答 7

4

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

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

于 2012-11-04T17:17:08.860 回答
1

您问题的第一部分没有任何意义,因为您没有提供有关b.

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

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

于 2012-11-04T17:17:15.327 回答
0

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

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

于 2012-11-04T17:12:50.347 回答
0

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

这取决于是什么b

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

不,这是一个无效的声明。a您应使用地址进行初始化。

于 2012-11-04T17:13:01.687 回答
0

它必须给你警告......intint *没有演员表的情况下转换它还取决于到底是什么p

于 2012-11-04T17:13:44.487 回答
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否则可能会指向一个无效的位置。

于 2012-11-04T17:17:06.660 回答
0

指针是任何变量的引用,并在其中存储其他变量的位置...您的示例应如下所示:

双a=3.0;诠释 b*=a;

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

于 2012-11-04T17:42:38.403 回答