【发布时间】:2011-09-09 11:30:03
【问题描述】:
假设
第一种情况
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 为什么不是 int a= &b 如果地址 b 的值为 65535
我不担心将它用作指针,请问题只是保存值。不尊重地址。人们说 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
【问题讨论】:
-
什么是“正常变量”? “指针必须在里面做某事”正确。你还需要知道什么?它们不是 整数。他们是指针。请更新您的问题以解释“正常变量”的含义。
-
虽然它是一个整数,但类型不匹配,因此您无法分配它们。这就像说
UnrelatedClassA和UnrelatedClassB只是字节,那么为什么不能将一个分配给另一个呢?它是类型系统的一部分。
标签: programming-languages c++ c pointers reference