指標與庫函式

2021-06-20 00:41:04 字數 1552 閱讀 8641

由於一些因素的影響,我們在學校中學的c語言是十分的膚淺的,而經過這堂課的學習之後,我才發現c語言在以後實際工作的重要地位。

在以前的學習中,我知道函式可以帶引數,但是由於當時所編寫的程式都比較簡單,都是只有乙個main函式、乙個檔案的程式,所以沒有想到過既然main函式也是函式那麼他也是可以有引數的。main函式的帶引數形式為int main(int argc,char **argv)。

那麼怎樣為乙個main函式來新增執行時的引數呢,在執行乙個編譯生成的可執行檔案時我們何以手動來輸入引數,比如說./main 引數1 引數2 ......。但是在有很多可執行檔案的時候不可能乙個個的手動輸入,這時候我們可以用shell指令碼來為多個可執行檔案傳遞引數,例如:

已有帶引數的可執行檔案main,test

#!/bin/sh

./main 引數1 引數2 ......

./test 引數1 引數2 ......

指標在c語言中的使用頻率是很高。指標有靈活的特點,但在使用時要仔細謹慎否則很容易會發生錯誤。

指標不但可以指向普通的變數,還可以指向函式。這為我們提高程式的重用性,進行更加合理的開發工作分工創造了有利條件。

比如說,我要使用下面的已經編好的max()比較兩個數字的大小,在使用時我不需要知道整個程式的比較演算法是怎麼實現的,我只需要然程式知道判斷的標準就可以了,也就是我只需要提供compar_int()函式就可以了。

void *max(void *base, unsigned int nmemb, unsigned int size, 

int (*compar)(const void *, const void *))

}return max_data;

}int compar_int(const void* x, const void* y)

在這段程式中我們還可以看到大量的使用了void *型別,void是無型別也就是可以代表所有的型別,這樣不管我們要比較的是int型,char型,float型等等都可以在不對max()函式源**進行修改的情況下使用max()函式,需要修改的是compar_int()函式,避免對**進行大段的修改,提高了**的重用性。

在程式設計工作中我們總是要用到很多的庫函式,使用庫函式可以大大的提高我們程式設計的效率。庫函式中的函式都是由程式方面的專家進行過優化的,所以效率相對來說都是比較高的。

在程式的執行中我們的資料都是需要存放在記憶體中的,記憶體的分配是由作業系統來管理的,在使用的時候我們就需要向系統申請記憶體,在c語言的庫函式中有malloc和calloc來為我們的請求動態的分配記憶體。在使用完記憶體之後,我們就需要將所占用的記憶體釋放掉以便下次使用,釋放記憶體可以用free來實現。

例如:#include

#include

int main()

在c語言中我們進場要對檔案進行操作,對檔案進行操作就要用到標準i/o庫函式。

例如:#include

#include

int main()

執行該程式可以向檔案test輸入字串。在輸入前要給s分配記憶體空間,否則在程式執行時會出現段錯誤。

在和他人合作開發專案時,庫函式就是相互交流的語言,合理的使用各種庫函式是一名程式設計師要掌握的基本技能。

qsort庫函式和函式指標

這個函式對陣列排序時需要知道 陣列起始的位址 陣列元素的個數 每個元素的大小 元素的排序規則 中每個單詞的含義 base 待排序陣列位址的起始位址 nelem 待排序陣列的元素個數 width 每個元素的大小 pfcompare 比較函式的位址 該比較函式需自己編寫規則 ps pf函式形式 int ...

c 函式指標和qsort庫函式

在c語言或者c 語言中可以把乙個函式的入口位址賦值給乙個指標,這就叫函式指標,然後可通過函式指標來呼叫函式。c語言中 定義形式 型別名 指標變數名 引數型別1,引數型別2 eg int pf int,char 表示pf是乙個函式指標,它所指向的函式,返回值是int,有兩個引數,分別為int和char...

庫函式與系統呼叫

系統呼叫 通常shell是通過系統呼叫將底層硬體功能向上層應用程式提供,linux的系統呼叫約有300多個 因為系統呼叫不考慮平台差異性,由核心直接提供,因此移植性較差。庫函式庫函式是由使用者或組織自己開發的,具有一定功能的函式集合 例如,如果使用者要讓音效卡發生,可能要呼叫好多個系統呼叫,而且系統...