C語言基礎01 函式

2021-10-04 18:17:16 字數 3518 閱讀 7368

引用呼叫:

int main(int argc, char** ar**);

預設庫math.h

string.h

stdlib.h

malloc/realloc/free 申請、釋放記憶體:

函式(本身有**,鏈結時程式執行先將函式引數入棧,再執行函式**)

實參在主調函式中定義與使用(進入被調函式後,實參變數不能使用)

實參可以是常量、變數、表示式、函式等。

無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。

①定義/宣告實參時,分配位址

②實參賦值

③呼叫函式,將實參值傳給形參

傳值呼叫和引用呼叫指的是用於引數傳遞過程中的一種機制。

傳值呼叫機制裡,形參是乙個區域性變數,其初始值為相應實參的值。

將實參的位址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

1.實參

①定義/宣告實參時,分配位址

②實參賦值

③呼叫函式,將實參位址傳給形參

2.形參(指標變數)

函式呼叫時

①為函式的形參(指標變數)分配位址

②將實參的位址 賦值給形參(指標變數)

→指標變數(形參)指向實參的儲存位置

→在被調函式中若改變形參的值,也就改變了原來變數的數值。

③函式結束,釋放形參位址

void swap(int *p, int *t){}

//指標p賦值&a ⇒指標p指向a

int p,t;

swap(&p,&t)傳位址

總結⇒傳址/引用(換名),都是為了使形參指向實參實際的記憶體位址。

變數引用&

(1)概念

引用乙個現有的變數宣告乙個引用(別名)變數

引用(別名)變數與其所代表的變數共享同一記憶體單元,系統並不為引用另外分配儲存單元

(2)初始化

宣告引用時必須指定它代表的是哪乙個變數,即對它初始化。

int b;

int &a=b; //宣告a是變數b的引用

實參int n=10;

add(n);

void add10(int &a)

argc表示引數的個數,ar**裡邊儲存各個引數

;第二個引數中ar**[0]為自身執行目錄路徑和程式名,ar**[1]指向第乙個引數、ar**[2]指向第二個引數

#include

intmain

(int argc,

char

*ar**)

主函式main並非程式的真正入口!

在編譯器對你的工程檔案進行編譯時,它是先找到你的main函式,然後根據main函式型別,把一段字首入口程式預先編譯,再讓它去呼叫main函式.當你的main函式需要引數時,它就編譯有引數main函式呼叫,反之則編譯無引數main函式呼叫.

所以編譯器是自動識別你的main函式型別的!

void main無返回值,部分編譯器可以通過。

函式宣告:int printf(const char *format, ...)

函式呼叫:printf("《格式化字串》", 《參量表》);

format – 字串(或字元陣列指標),包含了要被寫入到標準輸出 stdout 的文字。

它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加引數中指定的值替換,並按需求進行格式化 。

轉換說明符:

%c 字元 %s 字串

%d 、%i 有符號十進位制整數 %

4d 四個為單位,右對齊

%u 無符號十進位制整數

%f 浮點數(包括float和doulbe,預設保留六位小數,%

.6f)

%o 八進位制整數 %x 十六進製制整數

%p 指標

scanf("%d",&n);

把接收到的資料存入到整形變數n的記憶體中,

如果變數為陣列或者指標,則不需要&

putchar():輸出字元資料,puts()輸出字串資料。

gets()、getc()

讀檔案到記憶體

int fputc(int char, file *stream);

char *fgets(char *buf, int bufsize, fp);

*buf: 字元型指標,指向用來儲存所得資料的位址。bufsize: 整型資料,指明儲存資料的大小。

fpintg(fp,』』%?",變數名)

#include

intmain()

獲取字串長度 strlen():

size_t strlen(char const* str):size_t也就是無符號整數

計算指定字串 str 的長度,但不包括結束字元(即 null 字元:』\0』)

lt小於 :le小於等於 gt大於 ge大於等於 eq等於 ne不等於

sqrt():計算非負實數的平方根

abs(int x);求整數x的絕對值

fabs(double x);求浮點數x的絕對值.

pow(a,n):a的n次方,a和n還有返回結果都是double型別

strcpy(新,舊):複製字串的,接受兩個引數,乙個是被複製字串,另乙個新字串

strcmp(str1,str2)

string compare(字串比較),用於比較兩個字串並根據比較結果返回整數。

兩個字串自左向右逐個字元相比(按ascii值大小相比較),直到出現不同的字元或遇』\0』為止

當s1s2時,返回正數。

malloc分配指定大小的記憶體

void * malloc(long numbytes):分配numbytes個位元組,並返回指向該記憶體的指標。分配失敗返回乙個空指標。

realloc 是在原有的基礎上在開闢若干空間

指標名=(elemtype *)realloc(原指標名,新大小)

①先釋放原來指標 所指記憶體區域

②按照新大小重新分配空間

③將原有資料從頭到尾拷貝到新分配的記憶體區域

④並返回該記憶體區域的首位址。即重新分配儲存器塊。

void free(void *ptr):c語言中釋放記憶體空間的函式.

通常與申請記憶體空間的函式malloc()結合使用,可以釋放由 malloc()、calloc()、realloc() 等函式申請的記憶體空間。

(elemtype *) ;可將malloc返回的型別(void * )

強制轉換為(elemtype *)型別

用法:指令名=(elemtype )malloc( nsizeof(elemtype))

指標名 ⇔ 指標 指向記憶體的首位址(如陣列指標的基位址)

C語言基礎 01

1.陣列和鍊錶的區別是?主要是有結構和實現不同,導致的讀取效率 空間占用即擴充套件性的差別!2.乙個程式從開始執行到結束的完整過程 4個過程 3.如何引用乙個已經定義過的全域性變數?用extern,不會產生重複定義,因為只是宣告,不重複分配記憶體。4.佇列和棧的區別是什麼?如果用佇列實現棧的功能?佇...

C語言基礎01

一 資料型別 為什麼對資料進行分類 節約儲存空間,提高執行速度。整型 signed signed char 1 128 127 signed short 2 32678 32767 signed int 4 正負20億 signed long 4 8 正負20億 9開頭19位整數 signed lo...

c語言基礎01

列印字元 include int main 會將hello,world!列印在終端中。轉義字元 含義 a 響鈴 bel b退格 bs 將當前位置移到前一列 f換頁 ff 將當前位置移到下頁開頭 n換行 lf 將當前位置移到下一行開頭 r回車 cr 將當前位置移到本行開頭 t水平製表符 ht 跳到下乙...