2013-11-24 73 views
1

这是一个非常快速的问题。 我为什么允许这样做:字符指针数组赋值

char* sentence[2] ={"blahblah","trololo"}; 
int main() { 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 

但不是这个?:

char* sentence[2]; 
sentence[0] = "blahblah"; 
sentence[1] = "trololo"; 
int main() { 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 
+0

请考虑是否有多个源文件,每个源文件都包含代码* outside *以外的函数。当你将它们编译在一起时,你会期望所有代码执行的时间(以及以何种顺序)? – dreamlax

回答

3

您不允许执行第二部分任务,因为任务不在函数中。当您将分配到main()(或其他功能),这将是有效

char* sentence[2]; 
int main() { 
    sentence[0] = "blahblah"; 
    sentence[1] = "trololo"; 
    printf("%s",sentence[0]); 
    printf("%s",sentence[1]); 
    return 0; 
} 
0

我为什么允许这样做:

char* sentence[2] ={"blahblah","trololo"}; 

初始化被允许为全局变量。

但不是这个?:

的陈述

sentence[0] = "blahblah"; 
sentence[1] = "trololo"; 

使得功能(main())外没有任何意义。将它们移到该函数内部,它将起作用。

+0

Downvoters关心解释! – haccks

+0

我不反对downvoting(每次)。如果这是值得的,我欢迎对我的答案赞成低估,但我反对没有任何评论的低估。这是一个很糟糕的做法。 – haccks

-3

对不起我没有以正确的方式读取的问题,我没有看到函数main()

代码工作每次都在功能里面。函数必须被调用!主要由系统调用。所以这个代码是无法实现的。

你可以从函数中取出全局变量(例如costant)或结构体。

+0

为什么不能这样工作? – dreamlax