当我发表以下声明时:
int b;
int c;
int *b;
int *c;在编译时,我得到了以下输出:

注意:我正在使用Cygwin控制台,这就是为什么我不能复制粘贴输出
那么,我们在这里是否得出结论:当我们声明一个pointer变量时,它同时也是一个可以单独保存数据的普通变量吗?换句话说,具有地址和值的内存位置?
我这么问是因为我想试试pointer-to-pointer
例如,如果我有‘it **c’,如何使它保持以下内容:
(b) 值(B) /Address of (b)/Value of (a)/地址(a)
还有,有int ***c吗?
非常感谢。
发布于 2011-01-27 16:13:03
在相同的作用域中声明两个名称相同的变量。这是不允许的。
发布于 2011-01-27 16:12:06
int b;
int *b; 显然,这解释了您所看到的错误。
如何声明同名的两个变量?两个同名变量导致了冲突!
对此也有同样的解释:
int c;
int *c;两个变量同名,因此发生冲突!
发布于 2011-01-27 16:17:52
指针是存储内存地址的变量。所以,是的,它有一个值和一个内存地址。
int *p = 0; int **pp = &p。这是有效的,p是存储在堆栈中的指针,值为0和一些内存地址;pp也被分配到堆栈上,有另一个内存地址并保存p的内存地址。
内存地址必须存储在某处,并占用固定数量的存储空间。例如,根据实现的不同,一个内存地址可以存储在四个字节上。在这种情况下
sizeof(char) = 1sizeof(char *) = 4sizeof(any其他指针类型,包括指向指针)= 4.的指针
因此,通过执行reinterpret_casts,指针可以存储任何占用最多4个字节的类型。但你为什么要这样做呢?
https://stackoverflow.com/questions/4818757
复制相似问题