C語言 函數
內存屬性:
1.大小
2.位置
int a; 默認方式 (段)
————————————————————————————————————————————————————————————————————————————————————————
內核空間 應用程序不許訪問
------------------------------------------3g
棧空間 局部變量 讀寫 (運行時,函數內部使用的變量,函數一但返回,就釋放,生存周期時函數內)
-----------------------
運行時的堆空間 malloc (運行時,可以自我管理的分配和釋放的空間,生存周期由程序員覺得) 分配: malloc() ,一旦成功,返回分配好的地址給我們,只需要接受,對這個 地址的讀法,由程序員把握,輸入參數指定分配的大小,單位是B。
釋放:free(p);
------------------------
全局的數據空間 (初始化的,未初始化的) (static為局部的全局數據段) 讀寫 data(全局初始化) bss(全局未初始化)
只讀數據段 “ ” 字符串常量 只讀 text (靜態空間,整個程序結束時釋放內存,生存周期最長)
代碼段 code 只讀 text
-------------------------
0x0 ;
————————————————————————————————————————————————————————————————————————————————————
分配:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
輸入參數
調用者 : 函數名 (數據) //實參
被調者: 函數的具體實現
函數的返回值 函數名(接受的數據) // 形參
實參以拷貝的的形式傳遞給形參:
--------------------------------------------------------------------------------------------------------------------------------------------------
地址傳遞:(用處:1,上層允許下層子程序修改其空間值;;2. 連續空間的傳遞)
swpa()將main中的AB值拷入自己的AB值中交換數值,其swpa()中AB值被交換,但不會影響到main() 中的AB值
swap()將ab的地址拷入,直接操作其地址的值,致使main()中ab的值也發生變化。
空間的讀寫 (節約內存,只需要知道首地址)
void fun (char *p); 該空間可能修改
void fun (const char *p) 只讀空間
空間:首地址,結束地址(必須知道)
結束標誌:字符空間:內存裏面存放了0x00 (1B) while(p[i]==0) { };
非字符空間:0x00不能當成結束標誌,必須有數量。 for (i = 0 ; i < len ; i++) { };
一般定義數組定義為unsigned char buf [];
void * : 非字符空間的標識符; 形參可以代表任何形式 (char ,int,struct 等)。
void * 在具體使用中一定要轉化成具體的類型
實際中:如果操作整個空間,定義為void * ; 如果是值的修改,定義為具體。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
連續空間的傳遞:
1,數組
數組名 -- 標簽
實參:
int abc[10];
fun (abc)
形參:
void fun(int *p) == void fun (int p[10])
2.結構體
結構體變量
struct abc{int a;int b; int c;};
用: struct abc buf;
實參:
fun(buf); fun(&buf)
形參:
void fun (struct abc ai) void fun (struct abc *a2) 優
*********************************************************************************************************************************************************************
返回值
基本語法:返回類型 函數名稱 (輸入列表) return
指針式空間返回的唯一數據類型
int *fun();
地址 :指向的合法性。【不是局部變量】
局部變量buf定義在fun()中,作為返回值在main()中P指向時,已經消失;而“ ” 在常量區,不會消失,所以P指向
方式:1,static 靜態區
2,只讀區 (基本用不到)
3,堆區 (malloc申請空間,使用strcyp()將其初始化,返回;在主函數調用完成後必須使用free()釋放空間)
C語言 函數