当毒药正在准备中的时候,苏格拉底正在用长笛练习一支曲调 .
'这有什么用呢' 有人问他。 '至少我死前可以学习这支曲调. '
September 21, 2008
digest from sociology
The first rule of sociology is : Things ar not what they seem to be (Berger,1963:23). Social reality has many layers , and as we penetrate those layers, new realities and new truths emerge. Sociologists accept the fact that one person's "thuth" may not be another's. People can become blinded by their own truths so that they are unable to see others, as in the fable of the four blind menand the elephant.
July 06, 2008
May 08, 2007
May 07, 2007
May 03, 2007
數據類型與機器字長
昨晚調試程序時,產生了溢出,發現對c語言中有關數據類型和機器字長的關系一直很模糊,隨即找了些資料學習。(以下描述來自c++ primer 4th edition)
char类型通常是单个机器字节(byte)。
short、int和long类型都表示整型值,存储空间的大小不同。一般, short类型为半个
机器字(word)长, int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机
器中int类型和long类型通常于长是相同的)。
类型float、double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮
点数。一般float类型用一个字(32位)来表示, double类型用两个字(64位)来表示,long
double类型用三个或四个字(96或128位)来表示。
以上描述說明每一種數據類型所占的存储空间的大小并不是固定不變的,而是根據機器字長而變化的。
char类型通常是单个机器字节(byte)。
short、int和long类型都表示整型值,存储空间的大小不同。一般, short类型为半个
机器字(word)长, int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机
器中int类型和long类型通常于长是相同的)。
类型float、double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮
点数。一般float类型用一个字(32位)来表示, double类型用两个字(64位)来表示,long
double类型用三个或四个字(96或128位)来表示。
以上描述說明每一種數據類型所占的存储空间的大小并不是固定不變的,而是根據機器字長而變化的。
April 29, 2007
pointers on c notes 1st
1.當我們想要從邏輯上刪除一段代碼時:
我們通常的做法是用
/*
staments
*/
將代碼注釋掉。
在C語言中,這可不是個好主意,用以上方法你不一定能如愿。如果這段代碼內部原先就有注釋存在,這樣就會出問題。
要從邏輯上刪除一段C代碼,更好的辦法是使用#if 指令,如下:
#if 0
statements
#endif
在#if 和#endif之間的程序段就可以有效的從程序中去除,即使這段代碼之間原先存在注釋也無妨,所以這是一種更為安全的方法。
PS:這個問題使我想起了條件預處理指令的另外一個用法(在孫鑫vc++視頻教程第一課中有提到)
例如:在cpp中我們通常是把類的定義寫在一個頭文件中
假如有一個工程(project)包含三個文件
A.H
statementa
B.H
#include ‘’A.H'
statementb
C.CPP
#include
#include"A.h"
#include"B.h"
comandc
當我們編譯時就會報錯:error C2011: 'xxx' : 'class' type redefinition(xx類重復定義)
因為:A.H被包含了兩次
這時我們就可以采用以下方法,就可以解決重復包含的問題了。
A.H
#ifndef A_H
#define A_H
statementsa
#endif
2. 函數的原型聲明的作用:
a.告訴編譯器這些以后將在源文件中定義的函數的特征,當這些函數被調用時,編譯器就能對他們進行準確性檢查,
3.scanf函數的返回值是函數成功轉換并存儲與參數中的值的個數。
4.絕大多數c編譯器不進行數組下標的有效性檢查,所以你必須自行編寫代碼,否則當程序所讀取的文件超過數組的容量時,錯出來的值就會存儲在緊隨數組之后的內存位置,這樣就會破壞原先存儲在這個位置的數據,可能是其他的變量,也可能是函數的返回地址,這可能會導致多種結果,程序很可能不會按照你預想的那樣運行。
5.注意檢查&&與&,==與=的筆誤
6.有時候需要將一個容納字符的變量定義為int 型,是因為,從文件中讀取字符時當遇到EOF,因為它是一個整型值,它的位數比字符型要多,為了防止將輸入的讀取字符意外的被解釋為EOF,同時也意味著接受字符的變量必須足夠大,足以容納EOF,字符只是小整形術而已,所以用一個整型變量容納字符值并不會引起任何問題。
我們通常的做法是用
/*
staments
*/
將代碼注釋掉。
在C語言中,這可不是個好主意,用以上方法你不一定能如愿。如果這段代碼內部原先就有注釋存在,這樣就會出問題。
要從邏輯上刪除一段C代碼,更好的辦法是使用#if 指令,如下:
#if 0
statements
#endif
在#if 和#endif之間的程序段就可以有效的從程序中去除,即使這段代碼之間原先存在注釋也無妨,所以這是一種更為安全的方法。
PS:這個問題使我想起了條件預處理指令的另外一個用法(在孫鑫vc++視頻教程第一課中有提到)
例如:在cpp中我們通常是把類的定義寫在一個頭文件中
假如有一個工程(project)包含三個文件
A.H
statementa
B.H
#include ‘’A.H'
statementb
C.CPP
#include
#include"A.h"
#include"B.h"
comandc
當我們編譯時就會報錯:error C2011: 'xxx' : 'class' type redefinition(xx類重復定義)
因為:A.H被包含了兩次
這時我們就可以采用以下方法,就可以解決重復包含的問題了。
A.H
#ifndef A_H
#define A_H
statementsa
#endif
2. 函數的原型聲明的作用:
a.告訴編譯器這些以后將在源文件中定義的函數的特征,當這些函數被調用時,編譯器就能對他們進行準確性檢查,
3.scanf函數的返回值是函數成功轉換并存儲與參數中的值的個數。
4.絕大多數c編譯器不進行數組下標的有效性檢查,所以你必須自行編寫代碼,否則當程序所讀取的文件超過數組的容量時,錯出來的值就會存儲在緊隨數組之后的內存位置,這樣就會破壞原先存儲在這個位置的數據,可能是其他的變量,也可能是函數的返回地址,這可能會導致多種結果,程序很可能不會按照你預想的那樣運行。
5.注意檢查&&與&,==與=的筆誤
6.有時候需要將一個容納字符的變量定義為int 型,是因為,從文件中讀取字符時當遇到EOF,因為它是一個整型值,它的位數比字符型要多,為了防止將輸入的讀取字符意外的被解釋為EOF,同時也意味著接受字符的變量必須足夠大,足以容納EOF,字符只是小整形術而已,所以用一個整型變量容納字符值并不會引起任何問題。
Subscribe to:
Posts (Atom)