当前位置:  开发笔记 > IOS > 正文

涉及指针和数组的两个声明之间的区别

如何解决《涉及指针和数组的两个声明之间的区别》经验,为你挑选了4个好方法。

int *a[3]和之间有什么区别int (*a)[3]



1> Robert Gambl..:

int a[3]和之间没有区别int (a)[3],它们都声明a为3 ints 的数组.int *a[3]和之间有区别int (*a)[3],前者声明了一个3个指针的数组,int而第二个声明了一个指向3 int秒数组的指针.括号在这里有所不同,因为在C括号中的优先级高于*.



2> FreeMemory..:

或者,您可以使用cdecl,它以英语输出变量声明的含义.

cdecl> explain int*a[3]

声明一个指向int的指针数组3

cdecl> explain int (*a) [3]

声明一个指向int数组3的指针



3> bltxd..:

如果你有任何疑问,使用这个g ++技巧通常很方便:

#include 

template < class T > void describe(T& )
{
  // With msvc, use __FUNCSIG__ instead
  std::cout << __PRETTY_FUNCTION__ << std::endl;
}

int main(int argc, char* argv[])
{
  int *a[3];
  describe(a);

  int (*b)[3];
  describe(b);

  return EXIT_SUCCESS;
}

用g ++编译并运行它,你会得到:

void describe(T&) [with T = int*[3]]
void describe(T&) [with T = int (*)[3]]

所以,他们肯定不一样!你有的是:

    一个3个指向int的数组.

    指向3个int数组的指针.



4> CAdaker..:

看起来你的星号在格式化中丢失了......

int *a[3]

声明一个3的数组int*.

int (*a)[3]

将a声明为指向int的向量的指针.这与任何其他指针实际上并没有太大的不同,它只是指向一个更复杂的类型.

int foo[3];
int bar[3];
int (*vp)[3];
vp = &foo;
(*vp)[0] = 0;

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