AndyAO
V2EX  ›  问与答

为什么 C 和 Java 声明数组的语法不同,有什么故事吗?

  •  1
     
  •   AndyAO · Nov 8, 2020 · 2050 views
    This topic created in 2030 days ago, the information mentioned may be changed or developed.
    public class CharArrayTest {
        public static void main(String[] args) {
            type[] arrayRefVar_0;   // 首选的方法
            type arrayRefVar_1[];  // 效果相同,但不是首选方法
        }
    }
    
    
    type arrayName [ arraySize ];
    

    感觉 Java 的首选方法更符合我的直觉.

    Supplement 1  ·  Nov 8, 2020
    xiangyuecn
    lonewolfakela
    这两位的回答令人印象深刻,很有帮助.
    9 replies    2020-11-08 15:17:35 +08:00
    lonewolfakela
        1
    lonewolfakela  
       Nov 8, 2020   ❤️ 12
    c 语言的所有类型声明都遵守一个基本的格式:一个“类型” + 一个“用法范例”,数组也不例外
    就以数组声明为例子:
    int array[1000]
    这个意思是说,如果我们按照
    array[整数]
    这样的格式写一个表达式,就能得到一个 int 型的结果。

    如果说数组声明对这个格式的体现还不太明显的话,可以看看函数指针的声明:
    int (*p) (int, int)
    这表示,如果我们按照
    (*p)(整数, 整数)
    这样的格式写一个表达式,就会得到一个 int 型的结果。

    所以总结下来,c 语言声明语句最左侧其实是写的“这个变量在正确使用后会得到一个什么类型的结果”而不是“这个变量本身是什么类型”,而除开最左边的那个类型之外,声明的右半部分其实是对被声明变量的使用方法的一个示例。
    lonewolfakela
        2
    lonewolfakela  
       Nov 8, 2020
    相比之下,type[] array 这种风格的声明是更直接的一种:声明的左半部分是“被声明变量本身的类型”,右半部分是“被声明变量的名字”。
    这种写法确实更符合更多人的直觉(对数组类型还不太明显,但是如果你写一个返回函数指针的函数指针就能明白 c 语言的那种风格有多不直观了),所以比较新的语言更多地都是采用 type[] array 风格的。
    chihiro2014
        3
    chihiro2014  
       Nov 8, 2020
    跟编译原理有关
    icyalala
        4
    icyalala  
       Nov 8, 2020
    Java:
    int[] arrayName = new int[100];

    C:
    int* arrayName = calloc(100, sizeof(int));

    这样就一样了
    tairan2006
        5
    tairan2006  
       Nov 8, 2020
    C 的数组就是一个指针
    xiangyuecn
        6
    xiangyuecn  
       Nov 8, 2020   ❤️ 2
    int array[100] 眼睛告诉大脑是 100 个 array❌
    int[100] array 眼睛告诉大脑是 100 个 int✅

    肉眼可见的伪代码
    GBdG6clg2Jy17ua5
        7
    GBdG6clg2Jy17ua5  
       Nov 8, 2020 via iPhone
    看看 cpo
    GBdG6clg2Jy17ua5
        8
    GBdG6clg2Jy17ua5  
       Nov 8, 2020 via iPhone
    cpp
    jin7
        9
    jin7  
       Nov 8, 2020 via Android
    JAVA 是最好的语言。。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2640 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 05:54 · PVG 13:54 · LAX 22:54 · JFK 01:54
    ♥ Do have faith in what you're doing.