首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++指针-冲突声明和指针对指针

C++指针-冲突声明和指针对指针
EN

Stack Overflow用户
提问于 2011-01-27 16:09:59
回答 6查看 652关注 0票数 0

当我发表以下声明时:

代码语言:javascript
复制
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吗?

非常感谢。

EN

回答 6

Stack Overflow用户

发布于 2011-01-27 16:13:03

在相同的作用域中声明两个名称相同的变量。这是不允许的。

票数 2
EN

Stack Overflow用户

发布于 2011-01-27 16:12:06

代码语言:javascript
复制
int b;
int *b; 

显然,这解释了您所看到的错误。

如何声明同名的两个变量?两个同名变量导致了冲突!

对此也有同样的解释:

代码语言:javascript
复制
int c;
int *c;

两个变量同名,因此发生冲突!

票数 1
EN

Stack Overflow用户

发布于 2011-01-27 16:17:52

指针是存储内存地址的变量。所以,是的,它有一个值和一个内存地址。

int *p = 0; int **pp = &p。这是有效的,p是存储在堆栈中的指针,值为0和一些内存地址;pp也被分配到堆栈上,有另一个内存地址并保存p的内存地址。

内存地址必须存储在某处,并占用固定数量的存储空间。例如,根据实现的不同,一个内存地址可以存储在四个字节上。在这种情况下

  • sizeof(char) = 1
  • sizeof(char *) = 4
  • sizeof(any其他指针类型,包括指向指针)= 4.

的指针

因此,通过执行reinterpret_casts,指针可以存储任何占用最多4个字节的类型。但你为什么要这样做呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4818757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档