如果int *a = *b,将指向b引用的对象
If int *a = *b, will a point to the object that b references?
或地址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
- 引用对象成员函数的成员函数
- 从 Base 引用对象调用派生类的成员
- 转换引用对象的边界框?
- 现代编译器会优化只引用对象子集的局部变量吗
- l值引用对象上的Constexpr成员函数:Clang和gcc不同意
- 将 const 类型引用对象注册为类成员对象C++
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- 无法用2D矢量成员引用对象
- 在由引用对象传递中访问由引用对象传递的变量
- 如何使用QString引用对象名称
- 使用自动迭代器引用对象
- C++ 在另一个对象中引用对象的当前状态
- 使用共享对象和引用对象进行引用计数
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 引用对象的动态类型何时可以更改
- 引用对象内部的指针
- C++从全局静态函数中引用对象
- C++如何仅在没有其他人直接或间接引用对象指针时删除该指针
- 如何使用C++引用对象
- 为什么引用对象仅保存特定类型的引用