"int*a [5]"和int(*a)[5]"之间有什么区别?

Rag*_*rma 6 c c++ arrays pointers

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

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

先感谢您 !

Abh*_*bey 12

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

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

示例:

#include<stdio.h>
   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;
   }
Run Code Online (Sandbox Code Playgroud)


Sun*_*lly 6

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

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

我建议您使用cdecl来理解此类或任何复杂的声明。


jua*_*nza 5

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

int* a[5];
Run Code Online (Sandbox Code Playgroud)

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

int (*a)[5];
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

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


Daw*_*wid 5

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

#include <stdio.h>

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
}   
Run Code Online (Sandbox Code Playgroud)

那是什么意思?

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

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

区别在于().

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