char*和char[]

一直就认为C中的char*和char几乎是一样的,要是说区别,那就是char[]在声明之后,地址值是只读的,而char*的值是可变的。 不过今天看到两个程序: A: char* get_str(void){char str[] = {“abcdefghijk”};return str;}int main(int argc, char* argv[]){char* p = get_str();printf(“%sn”,p);return 0;} B: char* get_str(void){char *str = {“abcdefghijk”};return str;}int main(int argc, char* argv[]){char* p = get_str();printf(“%sn”,p);return 0;} 理论上,两个程序好像都不可以,因为都是返回一个局部变量。可结果是,第一个有warning,运行的确什么都没有打印出来;而第二个一切正常,能打印出字母来。这是为什么呢?我的gcc版本是 version 4.1.2 … Continue reading

试用mono(二)新建GUI项目篇

上次介绍了如何导入一个现有的VS .Net项目并运行,这次我们来看看mono如何创建一个新的项目。 首先在mono的welcome界面中点击Start a New Project,这时会出现下面的界面。其中,Console Project是新建一个C#的控制台项目;Empty Project是创建一个空的项目,没有任何文件;Library是新建一个库项目。在C#的子项ASP.NET中,还有一个Web Application,这个可以新建一个ASP.Net 的项目。以上四项与VS .Net中都是对应的。不过,在这里大家会发现会有一个Gtk# 2.0,这个是什么东东呢?到官方完站上看了一下,这个部分下次再介绍。 选择新建一个Cosnole Project,系统自动创建一个项目。项目中除了用于设定生成的有关程序集的常规信息参数必需的AssemblyInfo.cs文件之外,还有一个文件Main.cs,这是项目的主体。mono自动生成了一个Hello World的示例: 右击Solution工具栏中的项目,出现Add菜单,里面有New Dialog,New Window,New Widget和New Action Group。这点很有意思,在VS .Net中,Console项目是不能创建GUI的,至于那些Drawing命名空间则完全屏蔽了。而在mono中可以自由地创建GUI控件。本来想再写一个GUI篇,看来没有必要了,写在一起就好了。 我们选择新建一个窗口,此时会出现一个窗口如下: 这里有一个GTK# Window,还有一个Window。其实本质上它俩都是基于GTK#的window控件。GTK# Window是基于GTK#的控件,GTK#是gtk+的.Net绑定集,可以用它来编写生成gtk的原生程序。GTK#的文档可以从官方得到,而window则是gtk+中的控件,它与Visual C# .Net的window不是一个东西了。 如果新建一个GTK# Window,那么自动生成的代码是: using System;using Gtk;using GtkSharp; namespace … Continue reading