nik*_*iko 7 c c++ pointers programming-languages reference
假设
第一个案例
int a;
int *p= &a ; it works no error
Run Code Online (Sandbox Code Playgroud)
第二种情况
long int a;
long int b;
b = & a; it wont work
Run Code Online (Sandbox Code Playgroud)
我们大多数人都说b是变量而不是指针.但请参阅下文.
所以问题是如果&a返回地址是无符号整数那么为什么我们不能将它分配给正常变量?但为什么只能指针?见下文
b = (unsigned int) &a ; it works after typecasting though its not practicable.
Run Code Online (Sandbox Code Playgroud)
如果地址是整数格式,那么为什么无符号或长整数不能保存呢?我在想,背后肯定有一些隐藏的秘密.有人可以透露吗?我的想法是,指针必须在里面做一些事情,但我想知道它会是什么以及为什么普通变量不能.
感谢您的所有答案,但实际问题究竟是什么&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?
Run Code Online (Sandbox Code Playgroud)
以16位为例,正常指针(地址)大小为2个字节,可变大小为2个字节为什么我们不能将地址存储在其他变量中如果地址是整数值那就是我的问题我发现许多答案如++它增加4将指针和值1转换为变量,不要担心只是分配值是更重要的问题.
b = & a ; address of a is 4000
++b ; becomes 4001 thats it,thats not a problem
Run Code Online (Sandbox Code Playgroud)
Dea*_*ing 22
甚至long int,整数并不总是与指针大小相同.有时他们会(例如,大多数32位架构都有sizeof(int) == sizeof(void *)),有时它们会有所不同(例如,某些64位架构有,sizeof(long) == sizeof(void *)但有些则没有 - Windows上的Visual C++是编译器的主要示例sizeof(long) != sizeof(void *)) .
还有一个事实就是void *它的类型不一样long int.
想象一个类Foo和一个类Bar,定义如下:
class Foo {
public: int a;
};
class Bar {
public: int b;
};
Run Code Online (Sandbox Code Playgroud)
这就像问你为什么不能类的实例分配Foo给类型的变量Bar-它们是不一样的东西,即使在这种情况下,两个Foo与Bar具有相同的底层位模式.
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |