“int * a ”和int(* a)之间的区别是什么?

它们在C和C ++上的工作方式有所不同吗?

Ps我的第一个问题,我是一个编程菜鸟所以请尽量保持asnwer基本和简单:)

先感谢您 !

  1. int *a[5] -这意味着“a”是一个指针数组,即数组“a”中的每个成员都是一个指针
    整数类型; 数组的每个成员都可以保存整数的地址。

  2. int (*a)[5] -这里“a”是指向5个整数数组的指针,换句话说,“a”指向一个包含5个整数的数组。

示例:

 #include int main() { int b = 3; int c = 4; int *a[2] = {&b, &c}; // is same as ---int *a[] = {&b, &c} printf("value pointed to by a[0] = %d, by a[1] = %d\n", *a[0], *a[1]); return 0; } 

是的,这是一个巨大的差异。 让我们看一些代码:

 #include  int main() { int *a[5]; // same as: int *(a[5]); int(*b)[5]; printf("*a[5] vs (*b)[5] : %d vs %d", sizeof (a), sizeof(b)); // *a[5] vs (*b)[5] : 20 vs 4 } 

那是什么意思?

第一种情况( int * a [5] )是指向int的5个指针的数组

和second( int(* b)[5] )是指向5个int的数组的指针

区别在于()

是的,C和C ++中的行为是相同的。

这是一个由5个指向int的数组:

 int* a[5]; 

这是一个指向5个int数组的指针:

 int (*a)[5]; 

这是一个如何初始化指针或指针数组元素的示例:

 int a[5] = {0, 1, 2, 3, 4}; int (*p)[5]; // pointer to array of 5 ints int* b[5]; // array of 5 pointers to int p = &a; // p points to a for (int i = 0; i < 5; ++i) std::cout << (*p)[i] << " "; std::cout << std::endl; // make each element of b point to an element of a for (int i = 0; i < 5; ++i) b[i] = &a[4-i]; for (int i = 0; i < 5; ++i) std::cout << b[i] << " "; std::cout << std::endl; 

请注意,虽然我在示例中使用了C ++,但这适用于C和C ++。

int* a[5]声明a指向int的指针数组5

int (*a)[5]声明a指向int数组5的指针

我建议你使用cdecl来理解这样或任何复杂的声明。