亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C/C++編程新手錯誤語錄(續二)

2019-11-17 05:03:39
字體:
來源:轉載
供稿:網友
前文回顧:C/C++編程新手錯誤語錄  錯誤語錄(續一)(13)“整型變量僅僅意味著一個整數”
  當我們還是一個新手,看整型就是整數;

  當我們成為高手,看什么都是整型。

  整型,在所有C/C++基本數據類型中最富有藝術魅力和奇幻色彩。

  我們從某聞名論壇的一篇帖子開始一窺整型的奧妙。

  問:Vxworks操作系統啟動一個任務的函數是taskSpawn(char* name, int PRiority, int options, int stacksize, FUNCPTR function, int arg1,.. , int arg10),它只接受整型參數,我該怎么辦才能給它傳一個結構體(在32位PowerPC平臺下)?

  答:可以傳入結構體的指針,在32位PowerPC平臺下,指針本質上就是一個32位整數,在函數體內將整型強制轉化為結構體指針就可訪問結構體的每一個元素。

  如:
//啟動任務1
taskSpawn(“task1”, 180, NULL, 10000, Task1Fun, &pStrUCtAr,0,0,0,0,0,0,0,0,0);
//task1函數
Task1Fun ( int arg1 )
{
struct_x * pStructx = (struct_x *) arg1; //將整型強制轉化為結構體指針

}
  在此提出“泛整型”的概念,(unsigned)char、(unsigned)short int、(unsigned)int、(unsigned)long int等都屬于這個范疇,指針必然屬于“泛整型”的范圍。用指針的高超境界,也為將其看做一個“泛整型”。

  看看軟件的具體設計文檔,其數據結構定義部分經??吹健癐NT8、UINT8、INT16、UINT16、INT32、UINT32、INT64、UINT64”或“BYTE、Word、DWORD”等數據類型,它們在本質上都是(unsigned)char、(unsigned)short int、(unsigned)int、(unsigned)long int宏定義的結果,都屬于“泛整型”。所以,“泛整型”的概念真實地體現在日常的軟件設計當中。

更多文章 更多內容請看C/C++技術專題  java編程開發手冊專題,或
  正因為各種指針類型在本質上都是“泛整型”,因此它們可以互相轉化:
int a, b;
memset( (char*) &a, (char*) &b, sizeof(int) );
  等價于:
int a, b;
a = b;

  從來沒有人會用memset( (char*) &a, (char*) &b, sizeof(int) )來代替a = b,這里只是為了說明問題。下面的代碼則經常用到:
int *p = (int *) malloc(100*sizeof(int));

memset ( p, 0, 100*sizeof(int) ); //將申請的內存空間清0
  我們看memset的函數原型為:
void * memset ( void * buffer, int c, size_t num );
  實際上它接受的第一個參數是無類型指針,在memset函數體內,其它任意類型的指針都向void *轉化了。類似的內存操作函數memcpy所接受的源和目的內存地址也是無類型指針。

  char *轉化為int *后的值雖然不變(還是那個地址),但是其++、--等操作的含義卻發生了變化,這也是要注重的。
char *p;
++p;
  與
char *p;
++(int *)p;
  的結果是不一樣的,前者的p值加了1,而后者的則增加了sizeof(int)。

  下面來剝Windows程序設計中消息傳遞函數兩個參數的皮,看看它們究竟是什么:
typedef UINT WPARAM;
typedef LONG LPARAM;
  原來,WPARAM和LPARAM其實都屬于“泛整型”,所以不要報怨消息處理函數只能接受“泛整型”。實際上,從指針的角度上來講,在C/C++中,可以獲得任何類型實例(變量、結構、類)的指針,所以Windows的消息處理函數實際上可以接受一切類型的參數。

  驚天動地一句話:“泛整型”可表征一切。

更多文章 更多內容請看C/C++技術專題  Java編程開發手冊專題,或
(14)“值傳遞一定不會改變參數”

  理論而言,值傳遞的確不會改變參數的內容。但是,某年某月的某一天,隔壁Office的碩士mm寫了這么一段程序,參數的值卻被改變了:
int n = 9;
char a[10];
example ( n, a ); //調用函數example(int n,char *pStr)
printf (“%d”, n );  //輸出結果不是9
  大概整個office的人都被搞懵了,都說編譯器瞎搞,有問題。找到筆者,筆者憑借以往的經常,一眼就看出來不是什么編譯器出錯,而是在函數example內對字符串a的訪問越界!

  當在函數example內對a的訪問越界后,再進行寫操作時,就有可能操作到了n所在的內存空間,于是改變了n的值。

  給出這個語錄,并非為了推翻“值傳遞不會改變參數”的結論,而是為了從側面證實在C/C++語言中,數組越界是多么危險的錯誤!

  下面的兩個函數有明顯的數組越界:
void example1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
void example 2(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
  而這個函數的越界就不這么明顯:
void example3()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}
  其實,這個函數危險到了極點。因為對于strcpy函數而言,拷貝的時候要碰到’/0’才結束,str1并沒有被賦予結束符,因而你根本就不知道strcpy( string, str1 )的結果究竟會是拷貝多大一片內存!

  遺憾的是,C/C++永遠不會在編譯和連接階段提示數組越界,它只會在運行階段導致程序的崩潰。

  數組越界,是大多數C/C++編程新手常犯的錯誤,而它又具有極大的隱蔽性,新手們一定要非凡注重。

更多文章 更多內容請看C/C++技術專題  Java編程開發手冊專題,或
(15)“C不高級,學C++、JAVA、C#才夠味”

  也許譚浩強老師的C語言教材是絕大多數高校學生學習的第一門編程課程,所以在許多學生的心目中,覺得C是一種入門級的語言,他們舍棄基礎而追逐花哨的Visual XXX、Java、asp、php、.net,他們以為這樣做“賺大了”。


  非也!

  C是一種多么富有魅力的語言!在今時的絕對多數底層開發中,仍然幾乎被C完全壟斷。這些領域包括操作系統、嵌入式系統、數字信號處理等。舍棄C的經濟基礎搭.net的高層建筑實在是危險。

  我們總是以為自己把握了C,那么請寫一個strcpy的標準函數。您的答案若是:
void strcpy( char *strDest, char *strSrc )
{
  while( (*strDest++ = * strSrc++) != ‘/0’ );
}
  很遺憾,您的程序只能拿到E??纯茨肁的strcpy:
char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘/0’ );
return address;
}
  這個程序考慮了什么?

 ?。?)程序要強大:為了實現鏈式操作,將目的地址返回,函數返回類型改為char *

 ?。?)程序要可讀:源字符串指針參數加const限制,表明為輸入參數

 ?。?)程序要健壯:驗證strDest和strSrc非空

  假如這三點中您只考慮到0點或1點,那么請回家好好修煉一下C。因為這個最簡單的strcpy已驗證出您的C語言基礎只能叫做“入門”。

  再寫個簡單的strlen,這么寫就好了:
int strlen( const char *str ) //輸入參數為const
{
assert( strt != NULL ); //斷言字符串地址非0
int len;
while( (*str++) != '/0' )
{
len++;
}
return len;
}
  由此可見,寫好這些簡單的函數也需要深厚的基本功,永遠不要放棄對基本功的培養。

更多文章 更多內容請看C/C++技術專題  Java編程開發手冊專題,或
(16)“語言學得越多越好”

  許多的初學者都經歷過這樣的一個階段,面對大量的編程語言和開發環境,他們倆感到難以取舍,不知道自己究竟應該學習什么。于是他們什么都學,今天看一下Visual Basic,明天看學一下C++,后天在書點看到了本Java便心血來潮買回來翻翻,大后天又發現必須學.net了。他們很痛苦,什么都在看,結果什么都沒學會,忙忙碌碌而收獲甚微。

  我們真的沒有必要在什么語言都不甚精通的情況下亂看一氣。認準了一種真正語言就應該堅持不懈地努力。因為任何一門語言的把握都非一朝一夕一事,筆者從六年前開始接觸C++,直到現在,每一階段仍有新的啟發,在項目開發的過程中也不斷有新的收獲。今日我還是絕對不敢宣稱自己“精通”這門語言。

  許多剛畢業的大學生,動不動就在簡歷上寫上自己精通一堆語言。與之相反,大多數優秀的工程師都不敢這么寫。也許,研究越深,便越敢自身的無知。

  在下認為,一個成熟的語言體系應該是:
  程序員的語言體系 = 一種匯編 + C + 一種面向對象(C++、JAVA、C#等)

  假如還要加,那就加一種解釋型語言,perl或tcl(也許其它)。

  語言具有極大的相似性,從C++過渡到JAVA只需要很短的一段時間。各種語言的發展歷史也體現了編程思想的發展史。我們學習一種語言,語法也許并不是最重要的,最重要的是蘊藏在語法外表下的深層特性和設計用意。

  本回書著落此處,更多錯誤語錄,當然是待續。
更多文章 更多內容請看C/C++技術專題  Java編程開發手冊專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丝袜亚洲另类欧美重口| 中文字幕欧美日韩va免费视频| 国产精品第一页在线| 91亚洲国产精品| 亚洲欧美国产日韩中文字幕| 91高清免费在线观看| 91理论片午午论夜理片久久| 色99之美女主播在线视频| 色偷偷888欧美精品久久久| 尤物九九久久国产精品的分类| 疯狂欧美牲乱大交777| 欧美日韩成人在线观看| 欧美专区在线视频| 欧美午夜片欧美片在线观看| 亚洲精品国产精品国自产观看浪潮| 欧美中文字幕在线播放| 久久视频在线免费观看| 午夜精品久久久久久久白皮肤| www.日本久久久久com.| 欧美大片免费观看在线观看网站推荐| 亚洲电影免费观看高清完整版| 日韩在线观看免费全集电视剧网站| 日本中文字幕成人| 亚洲激情国产精品| 欧美色视频日本高清在线观看| 日本高清视频一区| 中文字幕成人精品久久不卡| 伊人久久男人天堂| 欧美一级片在线播放| 国产视频久久久久| 日韩第一页在线| 日韩中文视频免费在线观看| 成人免费淫片aa视频免费| 亚洲精品福利资源站| 国产精品电影网| 久久精品成人欧美大片古装| 国产视频精品一区二区三区| 欧美自拍视频在线观看| 日韩中文视频免费在线观看| 国产精品福利久久久| 亚洲欧洲黄色网| 久久久国产91| 精品福利在线视频| 国产精品com| 福利一区视频在线观看| 国模视频一区二区三区| 欧美日韩不卡合集视频| 久久精品视频在线播放| 丝袜情趣国产精品| 欧美精品免费在线观看| 亚洲成人a级网| 日韩动漫免费观看电视剧高清| 狠狠爱在线视频一区| 日韩精品视频在线播放| 亚洲第一视频在线观看| 国产精品一区二区久久| 欧美成人精品在线播放| 韩日欧美一区二区| 国产精品日日摸夜夜添夜夜av| 国产精品久久久久久久电影| 中文字幕久精品免费视频| 久久精品91久久香蕉加勒比| 国产香蕉97碰碰久久人人| 国产日韩在线精品av| 琪琪亚洲精品午夜在线| 在线视频中文亚洲| 日韩欧美国产激情| 久久亚洲精品中文字幕冲田杏梨| 国产不卡精品视男人的天堂| 久久不射电影网| 日本精品久久中文字幕佐佐木| 日韩免费视频在线观看| 国产精品啪视频| 国产精品一区专区欧美日韩| 欧美激情一区二区三区高清视频| 日韩欧美在线观看视频| 日韩视频精品在线| 亚洲精品久久久久国产| 国产精品视频免费观看www| 岛国视频午夜一区免费在线观看| 国产精品免费网站| 91在线视频九色| 97不卡在线视频| 81精品国产乱码久久久久久| 日韩视频在线免费| 456国产精品| 国产偷国产偷亚洲清高网站| 亚洲精品白浆高清久久久久久| 97在线观看免费| 国产欧美在线播放| 欧美亚洲视频在线看网址| 日韩中文在线中文网三级| 亚洲免费影视第一页| 国产乱肥老妇国产一区二| 日韩中文字幕在线视频| 国产精品一区专区欧美日韩| 色综合影院在线| 久久天堂电影网| 亚洲日韩欧美视频| 亚洲激情国产精品| 国产婷婷成人久久av免费高清| 97视频在线观看亚洲| 日韩女优在线播放| 日韩精品电影网| 欧美精品免费在线| 国产成人自拍视频在线观看| 亚洲综合最新在线| 国产精品视频久久久久| 国产在线精品播放| 日韩在线观看电影| 91九色单男在线观看| 欧美日韩在线视频一区| 欧美激情第三页| 国产99久久精品一区二区 夜夜躁日日躁| 欧美性极品xxxx做受| 久久999免费视频| www.xxxx精品| 欧美性猛交xxxx富婆弯腰| 日韩麻豆第一页| 国产精品国产亚洲伊人久久| 欧美一级淫片播放口| 日韩经典中文字幕在线观看| 亚洲最新av网址| 日韩欧美中文字幕在线观看| 久久久精品国产网站| 日韩电视剧在线观看免费网站| 日韩不卡在线观看| 亚洲精品久久久久久下一站| 久久91超碰青草是什么| 亚洲va国产va天堂va久久| 成人午夜在线观看| 亚洲第一av在线| 中文字幕免费精品一区高清| 在线成人免费网站| 91国在线精品国内播放| 亚洲精品国精品久久99热| 亚洲xxx自由成熟| 欧美精品videosex牲欧美| 青青青国产精品一区二区| 狠狠躁夜夜躁人人躁婷婷91| 孩xxxx性bbbb欧美| 欧美国产视频一区二区| 亚洲性生活视频| 中文字幕亚洲激情| 国产日韩在线免费| 精品一区二区亚洲| 亚洲字幕在线观看| 午夜精品美女自拍福到在线| 国产在线拍偷自揄拍精品| 亚洲国产欧美久久| 久久国产视频网站| 亚洲精品狠狠操| 亚洲男人天天操| 综合久久五月天| 国产精品视频大全| 日本电影亚洲天堂| 久久久精品久久久| 96pao国产成视频永久免费| 欧美在线观看视频| 国产精品久久久久久久av大片| 日韩欧美中文第一页| 国产精品美女视频网站| 国产精品18久久久久久麻辣| 色噜噜狠狠色综合网图区|