C C 常用函式

2021-10-04 20:57:01 字數 2252 閱讀 3018

目錄

1.malloc函式

2.new函式

3.結構指標

c的動態分配記憶體函式,該函式接受乙個引數:所需的記憶體位元組數。malloc()函式會找到合適的空閒記憶體塊,這樣的記憶體是匿名的。也就是說,malloc()分配記憶體,但是不會為其賦名。然而,它確實返回動態分配記憶體塊的首位元組位址。因此,可以把該位址賦給乙個指標變數,並使用指標訪問這塊記憶體。然而,從ansi c標準開始,c使用乙個新的型別:指向void的指標。該型別相當於乙個「通用指標」。malloc()函式可用於返回指向陣列的指標、指向結構的指標等,所以通常該函式的返回值會被強制轉換為匹配的型別。在ansi c中,應該堅持使用強制型別轉換,提高**的可讀性。然而,把指向void的指標賦給任意型別的指標完全不用考慮型別匹配的問題。如果malloc()分配記憶體失敗,將返回空指標。

double * ptd;

ptd = (double *)malloc(30*sizeof(double));

以上**為30個double型別的值請求記憶體空間,並設定ptd指向該位置。注意,指標ptd被宣告為指向乙個double型別,而不是指向內含30個double型別值的塊。回憶一下,陣列名是該陣列首元素的位址。因此,如果讓ptd指向這個塊的首元素,便可像使用陣列名一樣使用它。也就是說,可以使用表示式ptd[0]訪問該塊的首元素,ptd[1]訪問第2個元素,以此類推。malloc分配的記憶體,可用free函式**,如free(ptd);

c++中使用new函式來分配記憶體。

int *pn = new int;
new int 告訴程式,需要適合儲存int的記憶體。new運算子根據型別來確定需要多少記憶體。然後,它找到這樣的記憶體,並返回其位址。接下來,將位址賦給pn,pn是被宣告為指向int的指標。現在,pn是位址,*pn是儲存在那裡的值。通過delete來**記憶體。

delete pn;
釋放pn指向的記憶體。

使用new 來建立動態陣列

int *p = new int [10];

//使用delete釋放

delete p;

struct guy ;
宣告結構指標很簡單:

struct guy * him;
首先是關鍵字struct,其次是結構標記guy,然後是乙個星號(*),其後跟著指標名。這個語法和其他指標宣告一樣。

該宣告並未建立乙個新的結構,但是指標him現在可以指向任意現有的guy型別的結構。例如,如果barney是乙個guy型別的結構變數,可以這樣寫:

him = &barney;
和陣列不同的是,結構變數名並不是結構的位址,因此要在結構變數名前面加上&運算子。在本例中,fellow是乙個結構陣列,這意味著fellow[0]是乙個結構。所以,要讓him指向fellow[0],可以這樣寫:

him = &fellow[0];

him指向fellow[0],him + 1指向fellow[1]。

指標him指向結構變數fellow[0],如何通過him獲得fellow[0]的成員的值?

第1種方法也是最常用的方法:使用->運算子。我們有下面的關係:

如果him == &barney,那麼him->income 即是 barney.income

如果him == &fellow[0],那麼him->income 即是 fellow[0].income

換句話說,指向結構的指標後面的->運算子和結構變數名後面的.運算子工作方式相同(不能寫成him.incone,因為him不是結構名)。這裡要著重理解him是乙個指標,但是him->income是該指標所指向結構的乙個成員。所以在該例中,him->income是乙個float型別的變數。

第2種方法是,以這樣的順序指定結構成員的值:如果him == &fellow[0],那麼*him == fellow[0],因為&和*是一對互逆運算子。因此,可以做以下替代:

fellow[0].income == (*him).income

必須要使用圓括號,因為.運算子比*運算子的優先順序高。總之,如果him是指向guy型別結構barney的指標,下面的關係恆成立:

barney.income == (*him).income == him->income // 假設 him == &barney

c c 部分常用函式

1 關於返回值為浮點型的函式 sqrt 平方根函式,函式原型為double sqrt double 但我們通常會如 int n sqrt x 強制轉換成int型,容易產生誤差,所以最好使用sqrt x 0.5 的形式。pow 用來求 x 的 y 次冪 次方 x y及函式值都是double型 其原型為...

C C 常用函式彙總

1 字串連線函式 strcat strncat strcat char const char strncat char const char int char str1 30 people s republic of char str2 china strcat str1,str2 cout 2 字...

C C 常用自帶函式

首先使用之前必須要實現的函式 return的返回值 它決定了你是按從大到小,還是從小到大排序 從大到小 return int b int a 從小到大 return int a int b int cmp const void a,const void b main函式 int n scanf d ...