什么';这两者之间的区别是什么;int*a[5]”;和int(*a)[5]“是什么;? 他们在C和C++上会有不同的工作吗?

什么';这两者之间的区别是什么;int*a[5]”;和int(*a)[5]“是什么;? 他们在C和C++上会有不同的工作吗?,c++,c,arrays,pointers,C++,C,Arrays,Pointers,这是一个包含5个指向int的指针的数组: int* a[5]; 这是指向5整数数组的指针: 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 &l

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

int* a[5];
这是指向5整数数组的指针:

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;
inta[5]={0,1,2,3,4};
int(*p)[5];//指向5整数数组的指针
int*b[5];//指向int的5个指针数组
p=&a;//p指向a
对于(int i=0;i<5;++i)

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

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

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

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

  • 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;
       }
    
    #包括
    int main()
    {
    int b=3;
    int c=4;
    int*a[2]={&b,&c};//与--int*a[]={&b,&c}相同
    printf(“由[0]=%d、由[1]=%d\n、*a[0]、*a[1]指向的值);
    返回0;
    }
    
    是的,有很大的不同。让我们看一些代码:

    #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
    }   
    
    #包括
    int main()
    {
    int*a[5];//与:int*(a[5])相同;
    int(*b)[5];
    printf(“*a[5]vs(*b)[5]:%d vs%d”,sizeof(a),sizeof(b));
    //*a[5]对(*b)[5]:20对4
    }   
    
    这是什么意思

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

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

    这里的区别在于()


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

    你能初始化它,并给出一个例子,元素的访问将如何工作?(我希望这是对答案的回答:)@RaghavSharma
    int*a[5];int*b=a[0];int b[5];int(*c)[5]=&b;int y=(*c)[0]
    @RaghavSharma I添加了一个example@RaghavSharma:#include int main(),我们可以让它指向大于5的数组吗?或者在整个程序中它只能指向5的数组吗?谢谢你的回答:)这很有帮助!cdecl是新事物!谢谢:)上一个线程的答案中的一个关键点是注意int(*a)[5]可以是指向每行有5个整数的矩阵的第一行的指针,因此a[0]指向第一行,a[1]指向第二行。