引用呼叫:
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 跳到下乙...