当前位置:  开发笔记 > 编程语言 > 正文

成员指向数组元素的指针

如何解决《成员指向数组元素的指针》经验,为你挑选了1个好方法。

可以定义指向成员的指针,并在以后使用它:

struct foo
{
  int a;
  int b[2];
};

int main() {
foo bar; int foo::* aptr=&foo::a; bar.a=1; std::cout << bar.*aptr << std::endl; }

现在我需要一个指向数组特定元素的指针,所以通常我会写.
int foo::* bptr=&(foo::b[0]);
但是,编译器只是抱怨"invalid use of non-static data member 'foo::b'"是否可以这样做(或者至少没有工会)?

编辑:我需要一个指向数组特定元素的指针,因此int foo::* ptr指向数组的第二个元素(foo::b[1]).

还有另一个编辑:我需要访问数组中的元素bar.*ptr=2,因为指针在其他地方被使用,因此无法使用bar.*ptr[1]=2或调用它*ptr=2.



1> dirkgently..:

但是,编译器只是抱怨"无效使用非静态数据成员'foo :: b'"

这是因为foo::a并且foo::b有不同的类型.更具体地说,foo::bints 的大小为2的数组.您的指针声明必须兼容,即:

int (foo::*aptr)[2]=&foo::b;

是否可以这样做(或者至少没有工会)?

是的,见下文:

struct foo
{
  int a;
  int b[2];
};

int main()
{

  foo bar;

  int (foo::*aptr)[2]=&foo::b;
  /* this is a plain int pointer */
  int *bptr=&((bar.*aptr)[1]);

  bar.a=1; 
  bar.b[0] = 2;
  bar.b[1] = 11;

  std::cout << (bar.*aptr)[1] << std::endl;
  std::cout << *bptr << std::endl;
}

根据OP的要求更新了帖子.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有