C变量声明

时间:2016-05-04 04:02:39

标签: c

#include <stdio.h>
int main(void){
    char c1[], c2[];
    c1 = "hello";
    c2 = "world";
    printf("%s %s", c1, c2);
    return 0;
}

究竟是什么让我无法使用&#39; char c1 [],c2 []&#39;?我有一些Java知识,我发现C语法比较熟悉,但显然有些东西不起作用。

是否还有任何理由将char声明为char变量[]而不是char []变量?它似乎更有意义(Java表示法)

2 个答案:

答案 0 :(得分:6)

此:

char c1[]

表示“长度未知的字符数组”。您不能创建未知长度的数组,但可以将它们作为函数的参数,如:

void foo(char c1[])

如果长度是隐式已知的,您也可以创建它们,如:

char c1[] = "hello"; // size is 6, including null terminator

至于:

  

是否还有任何理由将char声明为char变量[]而不是char []变量?

一直都是这样。我确信C程序员觉得Java方式也没有意义。 40年前用语言语法做出的决定今天没有得到有用的辩论。

答案 1 :(得分:1)

准确地说,该代码不是声明,而是定义。在C中,您无法定义长度为空的数组,您可以明确指定它:

char c1[6] = "hello";

或者你可以隐含地这样做:

char c1[] = "hello";

如果数组的长度仅在运行时间内已知,请使用已分配的数组:

size_t n = <calculate the size needed>;
char *c1 = malloc(n);

但是对于声明,你可以做这样的外部声明:

extern char c1[];