c語言修煉(2)

2021-04-17 04:36:59 字數 1634 閱讀 4967

為了實現鏈式操作,將目的位址返回;對源位址和目的位址加非0斷言;將源字串加const,表明其為輸入引數。

char * strcpy( char *strdest, const char *strsrc )

呵呵,好習慣要學習呀。

void getmemory( char *p )

void test( void )

getmemory( char *p )函式的形參為字串指標,在函式內部修改形參並不能真正的改變傳入形參的值,執行完後的str仍然為null;

void getmemory( char **p, int num )

void test( void )

避免了上面的問題,傳入getmemory的引數為字串指標的指標

呵呵,這就使函式形參採用雙重指標的原因!!

記得str = null呀,防止野指標出現。

swap( int* p1,int* p2 )

這樣寫很不好,會「access violation」。指標不應當宣告後,直接取內容賦值,而應當先把已有量的位址賦給指標。

分別給出bool,int,float,指標變數 與「零值」比較的 if 語句

bool型變數:if(!var)

int型變數: if(var==0)

float型變數:const float epsinon = 0.00001;

if ((x >= - epsinon) && (x <= epsinon)

指標變數:  if(var==null)

陣列名可以轉換為指向其指代實體的指標,而且是乙個指標常量,不能作自增、自減等操作,不能被修改;陣列名作為函式形參時,淪為普通指標。

char str[10];

str++; //編譯出錯,提示str不是左值

為什麼標準標頭檔案都有類似以下的結構?

#ifndef __incvxworksh

#define __incvxworksh

#ifdef __cplusplus

extern "c"

#endif

#endif /* __incvxworksh */

解答:標頭檔案中的編譯巨集

#ifndef __incvxworksh

#define __incvxworksh

#endif

的作用是防止被重複引用。

作為一種物件導向的語言,c++支援函式過載,而過程式語言c則不支援。函式被c++編譯後在symbol庫中的名字與c語言的不同。例如,假設某個函式的原型為:

void foo(int x, int y);

該函式被c編譯器編譯後在symbol庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字。_foo_int_int這樣的名字包含了函式名和函式引數數量及型別資訊,c++就是考這種機制來實現函式過載的。

為了實現c和c++的混合程式設計,c++提供了c連線交換指定符號extern "c"來解決名字匹配問題,函式宣告前加上extern "c"後,則編譯器就會按照c語言的方式將該函式編譯為_foo,這樣c語言中就可以呼叫c++的函式了。(聯想起幾天前的鏈結錯誤高的焦頭爛額,原來就是沒有加extern 「c」)

strcpy ( 目的指標,資料指標 ); memcpy( 目的指標,資料指標 ,steps );

《C語言點滴》一1 5 內功修煉

c語言點滴 作為乙個門外漢,我真的不敢在這裡談論數學的話題。直到我在網上看到南京大學數學系張高飛老師的一篇文章,我決定將全文轉述在下面,下面分割線之間的就是張高飛老師那篇文章了。文章不長,但是讓我這個悲情人物找到了自信,數學裡面是有屬於我的乙個分支的,那就是計算數學!正如大家所知,代數幾何是現代數學...

C語言內力修煉與軟體工程

雖然如今很多人,特別是軟體工程理解的比較好但是還沒有達到滿瓶子的那些人,他們很鄙視使用c語言重新來做,他們十分推崇c 等oo語言,認為可用的庫比較多,從而可以使開發效率更高,可以使 可讀性更強,可以使 維護成本更低,他們認為你使用c語言來實現乙個c 庫里的功能是在炫技巧,是學院派行為 然而這種說法是...

C語言內力修煉與軟體工程

雖然如今很多人,特別是軟體工程理解的比較好但是還沒有達到滿瓶子的那些人,他們很鄙視使用c語言重新來做,他們十分推崇c 等oo語言,認為可用的庫比較多,從而可以使開發效率更高,可以使 可讀性更強,可以使 維護成本更低,他們認為你使用c語言來實現乙個c 庫里的功能是在炫技巧,是學院派行為 然而這種說法是...