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

If int *a = *b, will a point to the object that b references?

本文关键字:引用 对象 int 如果      更新时间:2023-10-16

或地址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 语言都禁止使用非分子值的指针初始化(NULL-POINTER常数除外)。这立即意味着double *a = 3.0不是有效的C或C 代码。它根本不会编译。另一个例子也适用于int *a = 5代码。

在C和C 中,为了将非点数值转换为指针类型,您需要明确的铸件。这种演员的结果是定义的实施。

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

的内存

if(*a ==*b)的意思是:检查与地址的内存内容a是否等于内存的内容,用地址b

如果int *a = *b,请指向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 = %pn", &val, b, a);
    return 0;
}

输出:

&val = 0xbfb652d4; b = 0xbfb652d4, a = 0x5

(地址值可能会更改)

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

指针是任何变量的引用,并存储其他变量的位置...您的示例应该像:

double a = 3.0;int b*= a;

因此,指针(b)将引用3.0

值的变量(a)