是*相当于C中的[]?

时间:2018-05-27 00:34:08

标签: c pointers

编码:

char *argv[]

与:

相同
char **argv

或者会:

char *string1;
int  *int_array;

完全相同:

char string1[];
int  int_array[];

4 个答案:

答案 0 :(得分:5)

绝对不是。一个是指针,另一个是数组。

但是,在参数方面,char *param相当于char param[]char param[16]

来自C11 draft N1570§6.7.6.3/7

  

参数声明为“类型数组”应调整为   “类型指针”[...]

答案 1 :(得分:3)

有几种情况可以使用[]。根据具体情况,它会有不同的处理方式:

  • 功能参数声明 - 此处char *argv[]相当于char **argv
  • 初始化的数组声明 - 这里int x[] = {1, 2, 3}是一种让编译器为您计算数组元素的方法
  • 翻译单位范围内的声明 - 此处int x[]被视为暂定声明,并在其他地方提供存储空间
  • struct 的最后一位成员 - 这是灵活成员声明,可让您将可变大小的数组“嵌入”{{1} }
  • 复合文字 - struct可让您“动态”构建数组,而无需声明特殊变量。

如您所见,(const int []) {1, 2, 3}*仅在第一种情况下得到相同的处理方式;在所有其他情况下,治疗方法都不同。

答案 2 :(得分:1)

没有!嗯,这取决于上下文,但显然它们不是同一类型。

*是一个指针,而[]是一个数组。

  

指针是一个变量,其值是另一个变量的地址,即存储单元的直接地址。与任何变量或常量一样,您必须在使用它来存储任何变量地址之前声明指针。在varname

之前,指针变量声明的一般形式是*

数组是对象列表。

我建议查找指针,因为它们是C和C ++的重要组成部分。

这是一个了解他们的好地方https://www.tutorialspoint.com/cprogramming/c_pointers.htm(也是我从上面引用的地方)

答案 3 :(得分:1)

没有

  

数组的概念与指针的概念有关。实际上,数组的工作方式非常类似于指向第一个元素的指针,实际上,数组总是可以隐式转换为正确类型的指针。

     

指针和数组支持相同的操作集,两者具有相同的含义。主要区别在于指针可以分配新地址,而数组则不能。

cplusplus了解详情。