2009年4月17日星期五

malloc,calloc,realloc区别

三个函数的申明分别是:
void* realloc(void* ptr, size_t newsize);
void* malloc(size_t size);
void* calloc(size_t numElements, size_t sizeOfElement);
size_t 表示字节
都在stdlib.h函数库内

它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL

malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
char* p;
p=(char*)malloc(20);

calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
char* p;
p=(char*)calloc(20,sizeof(char));
这个例子与上一个效果相同

realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);

注意,这里的空间长度都是以字节为单位。


C语言的标准内存分配函数:malloc,calloc,realloc,free等。
malloc与calloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域,返回首地址。
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。


free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。
C++中为new/delete函数。

C语言中const的作用

使用const的好处在于它允许指定一种语意上的约束------某种对象不能被修改--------编译器具体来实施这种约束。通过const,你可以 通知编译器和其他程序员某个值要保持不变。只要是这种情况,你就要明确地使用const ,因为这样做就可以借助编译器的帮助确保这种约束不被破坏。
(一)
首先解释一下const与指针的关系:
const在指针的声明中有一下三种形式:
const char *p = "hello"; // 非const指针,
// const数据,就是说p指向的那个内存空间的数据是不可变的,但p还可以指向新的内存地址。

char * const p = "hello"; // const指针,
// 非const数据,就是说这个指针p一旦赋值或初始化,就不能在指向其他位置了,但其指向的位置的数据值是可变的。

const char * const p = "hello"; // const指针,
// const数据,这个就很明显了,集上述两家之长处(也可能是短处哦,),上述两者都不可变。
一般来说,你可以在头脑里画一条垂直线穿过指针声明中的星号(*)位置,如果const出现在线的左边,指针指向的数据为常量;如果const出现在线的右边,指针本身为常量;如果const在线的两边都出现,二者都是常量。

恩,差点忘了,还有一种形式:
char const * p = "hello";
这其实与上边的情形一是一样的,只是由于个人习惯的不同,二者都是对的。

(二)
在一个函数声明中,const可以指的是函数的返回值,或某个参数;对于成员函数,还可以指的是整个函数。
const(1) int fun(int const(2)& )const(3)
{
int temp;
retrun temp;
}
参数的 const属性(上例2处)一般用引用传递,是为了保证该参数在函数中不允许被修改,一旦修改,编译器会报错。

而返回值的const属性(上例1处)是保证函数的返回值不被修改,也许你会质疑这种可能性,但是这种可能性确实存在,
详细情形如下:(摘自effective c++)
const rational operator*(const rational& lhs,
const rational& rhs);

很多程序员第一眼看到它会纳闷:为什么operator*的返回结果是一个const对象?因为如果不是这样,用户就可以做下面这样的坏事:

rational a, b, c;

...

(a * b) = c; // 对a*b的结果赋值

我不知道为什么有些程序员会想到对两个数的运算结果直接赋值,但我却知道:如果a,b和c是固定类型,这样做显然是不合法的。一个好的用户自定义类型的特 征是,它会避免那种没道理的与固定类型不兼容的行为。对我来说,对两个数的运算结果赋值是非常没道理的。声明operator*的返回值为const可以 防止这种情况,所以这样做才是正确的。

呵呵,象Scott Meyers这样的大师见地就是不一般吧

接下来说明函数的const属性:(上例3处)
当然喽,一般用于成员函数了,它有以下属性:
(1)const对象的访问只能靠const成员函数
(2)const成员函数不被允许修改它所在对象的任何一个数据成员。

(三)尽量使用 const代替define 吧,因为const是类型安全的。
应该使用
const double pi = 3.1415926;
而不要用#define pi 3.1415926
后者是宏,仅仅是对程序中的pi用3.1415926代替,会让你对于一些编译时的错误很难定位。

[GLib学习]gtype.h文件(未完成)

gtype.h文件

在GLib里,所有的基本类型都被封装成g*的形式,如char封装成gchar,如下是一部分这样的代码:
typedef char gchar;
typedef short gshort;
typedef long glong;
typedef int gint;
typedef gint gboolean;

typedef unsigned char guchar;
typedef unsigned short gushort;
typedef unsigned long gulong;
typedef unsigned int guint;

typedef float gfloat;
typedef double gdouble;
值得注意的是它还把void *和const void *封装成gpointer和gconstpointer,大大方便了编程。
typedef void* gpointer;
typedef const void *gconstpointer;

封装这些类型后,还提供了这些类型的比较的函数指针:
typedef gint (*GCompareFunc) (gconstpointer a,
gconstpointer b);
typedef gint (*GCompareDataFunc) (gconstpointer a,
gconstpointer b,
gpointer user_data);
typedef gboolean (*GEqualFunc) (gconstpointer a,
gconstpointer b);
以下的函数指针未理解功能
typedef void (*GDestroyNotify) (gpointer data);
typedef void (*GFunc) (gpointer data,
gpointer user_data);
typedef guint (*GHashFunc) (gconstpointer key);
typedef void (*GHFunc) (gpointer key,
gpointer value,
gpointer user_data);

GFreeFunc函数指针看上去是用于释放内存的,Glib提供类似的函数g_malloc和g_free来分配和释放数据结构的内存。
typedef void (*GFreeFunc) (gpointer data);
GTranslateFunc函数指针用于将指针转换为字符串(暂时不确定,纯属猜测)
typedef const gchar * (*GTranslateFunc) (const gchar *str,
gpointer data);

[GLib学习]索引贴

***此贴记录关于我学习GLib过程,为了督促自己学习开源代码,写博客是个不错的方法。此贴就作为一个索引贴,会慢慢完善***

GLib库简介:
GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函 数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。它能够在类UNIX的操作系统平台(如 LINUX, HP-UNIX等),WINDOWS,OS2和BeOS等操作系统台上运行。
IBM教程网上有浅显的入门:http://www.ibm.com/developerworks/cn/linux/l-glib/index.html

索引:

gtype.h学习:http://swinging-breeze.blogspot.com/2009/04/glibgtypeh.html
garray.h/garray.c学习:

2009年4月16日星期四

[转]Linux 漫画杂志两种

略作简要说明,一并介绍给喜欢 Linux,同时也喜欢漫画的朋友。

Ubunchu!

Ubunchu

Ubunchu! 是一本日本漫画杂志,其中讲述在学校电脑俱乐部中的三个同学使用 Ubuntu 的故事。Ubunchu! 的作者为 Hiroshi Seo,目前已由 ubuntu-jp LoCo 的两名会员翻译成英文,你可以获取它的 PDF 版本。

Hackett and Bankwell

Hackett and Bankwell

很有教育性的 Linux 漫画,主角为 Woody Hackett,一只看上去有点猥琐的企鹅,引导你如何进入 GNU/Linux 世界。目前已发行了两集,同样有 PDF 版本可以下载。

以下那张漫画比较有意思:大意是男的装完ubuntu之后想玩他的XE游戏,说本来不行,但是装了Wine之后就可以了!

2009年4月15日星期三

GNOME 2.26 Release Notes

Figure 1 GNOME 2.26





GTK+ 2.16变化最明显:

GTK+ 2.16 is the latest release of the GTK+ toolkit, which is at the heart of GNOME. GTK+ 2.16 includes a couple of new features for developers, as well as extensive bug fixing and housecleaning for the upcoming GTK+ 3.0.

GtkEntry widgets can now display icons at the front or back of the entry widget (depending on your locale's text direction). These icons are optionally prelightable and clickable.

Icons in GtkEntry(框内现在可以放入Icon了)

GtkEntry widgets can now also be used to display a progress bar.

GtkEntry with a progress bar(框支持了以下进度条的效果)

A new interface, GtkActivatable, has been added for widgets that can be connected to a GtkAction.




2009年4月13日星期一

推荐四月新番:《初恋限定》(原作:河水下希)

看过《草莓百分百》的人都知道河水下希,可以说是恋爱漫画的始祖了。同样是河水下希的作品:《初恋限定》最近也被动画化了。绝对是可以让人追的十分优秀的恋爱、搞笑动画。

网上的信息:

河下水希自草莓100%完結以來,再次於《週刊少年Jump》上連載的作品。這部漫畫是以各種各樣女孩的初戀故事為背景而展開的小故事。

2008年5月已完結,全部32話。

初中女生

全體人員是開始連載當時雪之下中學2年級學生,其後在作品中升級。

有原亞由美(有原 あゆみ(ありはら あゆみ) 聲優:伊瀨茉莉也)
喜歡衛。衛的哥哥操向她表白,但是她沒回答。是美少女,但雙腿力量非常大。也許是頭腦太不好,經常弄錯漢字。而且她也不擅長料理。
別所小宵(別所 小宵(べっしょ こよい) 聲優:豐崎愛生)
最喜歡哥哥的少女。視岬為情敵。但是想得的山本疼愛。很會做料理,但不反省家庭經濟的豪華的用餐,每次都受到哥哥的斥責。
千倉名央(千倉 名央(ちくら なお) 聲優:藤村步)
溫和、有同情心、誠實的少女。是曾我部喜歡的對象。但是,當她遇見美術部的畢業生連城由紀人時,就開始被他吸引。在單行本第4冊後提及原設定為有錢人,但因編輯反對而放棄設定。
土橋理香(土橋 りか(どばし りか) 聲優:壽美菜子)
擁有褐色的皮膚,萬能運動神經的少女。所屬網球部。寺井和正陪著。是寺井喜歡的對象,但是那個是本人沒戀愛的習慣。
江之本慧(江ノ本 慧(えのもと けい) 聲優:伊藤靜)
被年銷售額十三億日元的男子求婚過的美少女。平常捆紮頭髮。所屬手工藝部。但是對經常吵架的楠田產生感情。
不動宮(不動宮 すみれ(ふどうのみや すみれ))
戲劇部副部長。是在時髦眼鏡上掛短項鍊、超長頭髮等獨特的流行感覺的人。

初中男生

全體人員是開始連載當時雪之下中學2年級學生,其後在作品中升級。

楠田(楠田(くすだ) 聲優:淺沼晉太郎)
容貌如小學生,好色的男子。喜歡經常與他吵架的江之本。
財津衛(財津 衛(ざいつ まもる) 聲優:入野自由)
美少年的性格。有成為急救隊員的夢。受有原亞由美表白,但是本人喜歡岬。
曾我部弘之(曽我部 弘之(そがべ ひろゆき) 聲優:櫻井孝宏)
妄想、很容易誤會男子。喜歡同班的千倉。對自己有絕對性的自信,然而由於連城由紀人的出現,喪失自信。
寺井春人(寺井 春人(てらい はると) 聲優:岡本信彥)
所屬網球部。戴眼鏡,自從喜歡土橋後,對網球更努力。

高中女生

除了久間菜之花是作品中插班的1年級學生外,其他人員開始連載當時是水仙寺高中1年,其後在作品中升級至2年。

山本岬(山本 岬(やまもと みさき) 聲優:田中理惠)
看一眼都會被吸引的美人,甚至作為情敵的小宵都被吸引。從小宵的哥哥良彥、操守的弟弟衛等也喜歡她,但是意想不到她本人對有原產生感情。
渡瀨惠琉(渡瀬 めぐる(わたせ めぐる) 聲優:白石涼子)
擔任游泳部的經理。經常為自己的巨乳而自卑,但是想法從和某男子的見面後改變。喜歡武居源五郎。
江之本夕(江ノ本 夕(えのもと ゆう) 聲優:佐藤聰美)
慧的姐姐。和慧截然相反。有幼稚的姿容和性格,姊妹關係正逆轉。廣泛的興趣令她有很多男性朋友。
久間菜之花(久間 菜の花(きゅうま なのか))
自認渡瀨惠琉對對手後,追蹤她然後向水仙寺高中入學。外觀如小學生,但實力很高。

[編輯] 高中男生

除了武居和連城,其他人員開始連載當時是1年,其後在作品中升級至2年。(武居升到3年,連城畢業)除了財津、連城以外,其他人員是水仙寺高中的學生。

財津操(財津 操(ざいつ みさお) 聲優:乃村健次)
財津衛的哥哥,喜歡有原亞由美。與弟弟的性格、體型完全不同,一般人看不出是兩兄弟,亞由美一開始也不知操是衛的哥哥。與山本岬是青梅竹馬。
有原有二(有原 有二(ありはら ゆうじ) 聲優:吉野裕行)
有原亞由美的哥哥,是一名妹控。被山本岬喜歡。
別所良彥(別所 良彦(べっしょ よしひこ) 聲優:日野聰)
別所小宵的哥哥,喜歡山本岬,最後因妹妹小宵而失戀。每次妹妹做豪華的用餐,都會斥責妹妹不反省家庭經濟。
千倉一真(千倉 一真(ちくら かずま))
千倉名央的哥哥,是一名俊男。與有原、別所等朋友相同班級。在單行本第4冊後交代主劇情已經完結,但其實只於少部份時間出現。
上村(上村(うえむら))
志願是漫畫家的少年。即使自覺有稍微自我意識過剩。喜歡江之本夕。
武居源五郎(武居 源五郎(たけい げんごろう))
充滿豪俠氣概、熱愛游泳、喜歡泳衣的笨蛋。渡瀨惠琉的初戀(單戀)的對象。喜歡渡瀨惠琉的巨乳。
連城由紀人(連城 由紀人(れんじょう ゆきと))
名校開帝高中的3年級生。雪之下中學美術部的OB,是畫了令千倉名央憧憬圖畫的人。藉著畢業後春假重返美術部,但這只是秘密地承擔苦惱的路線。最後出國幫助貧窮國家之人民,同時與不同國家之孩童一起繪畫。