char [] c和char c []有什么区别?

时间:2014-02-20 09:16:36

标签: c# c++ arrays char

正如我在标题中写的那样,我很困惑如何声明一个char数组,而搜索的结果是

1。char[] c

2。char c[]

第二个与我相似,因为我是在大学里学到的。如果第一个是合法的,我可以做char[5] c吗?

3 个答案:

答案 0 :(得分:2)

条款:

char[] c

这是一个常规字段或本地声明,声明c属于char[]类型。

char c[]

这在任何情况下都不合法。

  

如果第一个是合法的,我可以做char[5] c之类的事情吗?

通常,你会做类似的事情:

char[] c = new char[5];

或同样地:

var c = new char[5];

您引用的char[5] c语法无效。 语法fixed char c[5] - 但这不是数组 - 它是固定缓冲区(其中c现在是不安全的{{1}指向char*中保留块的指针,其大小足以容纳5 unsafe struct个值,所以10个字节。)

答案 1 :(得分:0)

char[] c错了。如果您在visual studio中尝试char[5] c,则会出现类似

的错误
  

不允许使用空属性块。

我认为只有char c[]是正确的。

答案 2 :(得分:0)

在C(++)世界中:

这在很大程度上取决于编译器的容忍程度。在某些情况下,[]只是一种写作*更具意向性的方式。 C风格的数组不是“真正的”数组,它们只是指向一组模糊类型数据的第一个元素的指针。

随着代码中显示更多意图的转变,简单char *cchar []c(对许多人,甚至大多数编译器都无效)和char c[]之间的区别很大再多一点。也就是说,这不是技术限制 - 它仍然只是一个指针,你可以c[5]使用char *c,方法与char c[]相同。< / p>

略有不同的变体是具有静态长度的数组,例如。 char c[5]。这与简单char *c有更大的不同。它仍然只是一个指针,但你不是手动分配它。它有其优点和局限。

在任何情况下,char[] c,即使它在编译器中语法正确(可能在C ++ .NET中),就C / C ++而言,这将是一个不好的符号,因为它意味着变量的“数组”在“类型”中,实际上并不正确。

通常的例子是这样的;在C#中:

char[] a, b;

声明两个char数组ab。但是,在C:

char* a, b;

声明一个char指针和一个char变量。

那就是说,我可以相信它是C ++ .NET / C ++ / CLI中有效且正确的方式。如果它确实遵循.NET标准,那很可能。

巨大的免责声明:不要混淆不同的C风格语言。他们往往非常不同。特别是C#是非常不同的,并且很多语法都被改变了,相同的关键字可能意味着完全不同的东西。

C ++建立在C之上(因此C代码主要在C ++中工作),例如,同样如此。 Objective-C的。 C#完全超出了这个环境。它不是一个扩展,它只是受到一些风格(例如花括号)的启发,但非常非常不同。最后,它可能更接近(Object)Pascal而不是C(++),即使在视觉上它看起来更接近C。