【问题标题】:What is the difference of char[] c and char c[]?char[] c 和 char c[] 有什么区别?
【发布时间】:2014-03-21 02:59:44
【问题描述】:

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

1.char[] c

2.char c[]

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

【问题讨论】:

  • 当您尝试char[5] c 时会发生什么?
  • 我现在不能尝试,我现在在讲课,而不是在实验室。
  • 因为我学的是编程基础,所以讲师讲的是数组。我确实在 4 年前学习了 C++。现在我搜索的都是c#。
  • 您知道它们是不同的语言吗?在一种语言中有效的语法在另一种语言中可能无效?下定决心,您要问的是哪种语言
  • @logger 我正在将标签从 .net 更改为 c#,因为其中只有一个是语言

标签: c# c++ arrays char


【解决方案1】:

char[]c 是错误的。如果你在 Visual Studio 中尝试char[5] c,你会得到类似

的错误

不允许空属性块。

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

【讨论】:

    【解决方案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现在是一个不安全的char*指向保留的指针块在 unsafe struct 中足够大,可以容纳 5 个 char 值,所以 10 个字节)。

    【讨论】:

    • 非常感谢您的回答,我误解了C++和C#的问题。
    【解决方案3】:

    在 C(++) 世界中:

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

    随着代码中显示更多意图的转变,简单的char *cchar []c(这对许多甚至大多数编译器都无效)和char c[] 之间的区别被放大了一点。也就是说,这不是技术上的限制——它仍然只是一个指针,您可以像使用char c[]一样使用c[5]char *c

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

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

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

    char[] a, b;
    

    声明两个字符数组,ab。但是,在 C 中:

    char* a, b;
    

    声明一个字符指针和一个字符变量。

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

    一个巨大的免责声明:不要混淆不同的 C 风格语言。它们往往非常不同。尤其是 C# 非常不同,很多语法都发生了变化,相同的关键字可能意味着完全不同的东西。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2018-05-08
      • 2023-03-03
      • 2014-05-03
      • 2020-06-26
      • 2013-05-16
      相关资源
      最近更新 更多