梓益C語言學習筆記之指針

梓益C語言學習筆記之指針

一、32位平臺下,地址是32位,所以指針變量佔32位,共4個字節

二、內存單元的地址即爲指針,存放指針的變量稱爲指針變量,故:“指針”是指地址,是常量,“指針變量”是取值爲地址的變量。

char*型指針一次取一個字節,int*型指針一次取4個字節,double*取兩次4字節

數組名是指針,代表數組首元素的地址,但數組名是常量,不能修改。

三、通過指針變量可以取得數組或函數的首地址

int*p,表示p是一個指針變量,它的值是某個整型變量的地址

指針數組:int *a[10];   這是個指針數組,數組a中有10個整型的指針變量    a[0]~a[9]

數組指針:int (*a)[10];   數組指針變量,它是個指針變量。它佔4個字節,存地址編號。它指向一個數組,它加1的話,指向下個數組。

函數指針:int(*p)(int,int);//定義了一個函數指針變量p,p指向的函數,必須有一個整型的返回值,有兩個整型參數。

     如: int max(int x,int y)

{

}

 

可以用這個p存放這類函數的地址。

p=max;

調用:

int  num;

num=(*p)(3,5);

四、指針變量賦值:

1,初始化賦值int a;  int*p=&a;

2,賦值語句int  a;  int *p=NULL;  p=&a;

爲安全起見,指針變量未賦值不能使用,可先賦NULL

五、內存區域:

操作系統會將物理內存映射爲虛擬內存,增加類似如下的分區

1,棧區stack:函數參數,返回值,局部變量(自動賦隨機值)

2,堆區heap:動態內存分配

3,全局未初始化區bss:全局未初始化,靜態未初始化數據

4,全局初始化區data:全局初始化,靜態初始化數據

5,文字常量區text:文字,常量

6,代碼區:可執行文件的二進制碼

例:

char  str[100]="hello";//hello存在字符串裏,在棧區,str裏的內容可以修改

char  *p="hello";//hello 存在文字常量區,屬於常量,不能修改,不能通過*p修改原字符串的值,P存在棧區,可以改變P的值使其指向別的字符串。

char  *str=(char  *)malloc(10*sizeof(char));//堆區,內容可修改

六、數組指針:int a[5]={1,2,3,4,5};   a:數組名,指向首元素地址a==&a[0];    a+1:a[1]的地址;   &a:取整個數組地址

七、數組部分初始化後,其餘值自動初始化爲0,例:int  a[5]={0};     char  str[100]=" ";


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章