正如我在标题中写的那样,我很困惑如何声明一个char数组,而搜索的结果是
1。char[] c
2。char c[]
第二个与我相似,因为我是在大学里学到的。如果第一个是合法的,我可以做char[5] c
吗?
答案 0 :(得分:2)
以c#条款:
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 *c
和char []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数组a
和b
。但是,在C:
char* a, b;
声明一个char指针和一个char变量。
那就是说,我可以相信它是C ++ .NET / C ++ / CLI中有效且正确的方式。如果它确实遵循.NET标准,那很可能。
巨大的免责声明:不要混淆不同的C风格语言。他们往往非常不同。特别是C#是非常不同的,并且很多语法都被改变了,相同的关键字可能意味着完全不同的东西。
C ++建立在C之上(因此C代码主要在C ++中工作),例如,同样如此。 Objective-C的。 C#完全超出了这个环境。它不是一个扩展,它只是受到一些风格(例如花括号)的启发,但非常非常不同。最后,它可能更接近(Object)Pascal而不是C(++),即使在视觉上它看起来更接近C。