我想知道 &a 到底返回什么?

2024-01-26

Suppose

第一个案例

 int a;
 int *p= &a ; it works no error

第二种情况

 long int a;
 long int b;
 b = & a; it wont work 

我们大多数人都说 b 是变量而不是指针。但请看下面的内容。

所以问题是如果&a返回的地址是无符号整数,那么为什么我们不能将其分配给普通变量呢?但为什么只针对指针呢? 见下文

b = (unsigned int) &a ; it works after typecasting though its not practicable.

如果地址是整数格式,那么为什么不使用无符号或长整数保存它?我想,这背后一定有什么不可告人的秘密。有谁能透露一下吗?我的想法是,指针必须在内部做一些事情,但我想知道它会是什么以及为什么普通变量不能这样做。

感谢您的所有回答,但实际的问题到底是什么&a回报?是否为整数值?如果它是整数为什么变量不能保存它? long int a =65535 \valid 如果地址 b 的值为 65535 为什么不 int a= &b

我不担心将其用作指针,请问题是关于仅保存值。不尊重地址。人们说 32 位或 64 位,我并不担心。如果地址是整数,为什么无法保存地址?

我的意思是为什么我们不能分配值,我并不是说将指针的属性分配给变量,而是只是分配值而已

a=65535
b = a \\ works it assigns b - 65535
&a=65535
b = & a   \\ doesn't work, if address is a some integer value,why we can't store it in a variable?

以 16 位为例,普通指针(地址)大小为 2 个字节,变量大小为 2 个字节,如果地址是整数值,为什么我们不能将地址存储在其他变量中,这就是我的问题,我发现很多答案,例如 ++ 它增加 4到指针和值 1 到变量,不用担心只是分配值是更重要的问题。

  b = & a ; address of a is 4000
  ++b ; becomes 4001 thats it,thats not a problem 

整数,甚至long int,并不总是与指针的大小相同。有时它们会(例如,大多数 32 位架构都有sizeof(int) == sizeof(void *)),有时它们会有所不同(例如,某些 64 位架构有sizeof(long) == sizeof(void *)但有些则不然——Windows 上的 Visual C++ 是编译器的一个主要示例,其中sizeof(long) != sizeof(void *)).

还有一个事实是void *根本不一样type as long int.

想象一下一个班级Foo和一个班级Bar,定义如下:

class Foo {
   public: int a;
};

class Bar {
   public: int b;
};

这就像问为什么不能分配类的实例Foo到一个类型的变量Bar——它们不是同一件事,尽管在这种情况下两者都是Foo and Bar具有相同的基础位模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想知道 &a 到底返回什么? 的相关文章

随机推荐