2016.7.25
任何型別的一維、二維、三維指標占用空間大小相同4個位元組(32位作業系統)8個位元組(64位)
指標與陣列
//陣列:表示一段連續的記憶體空間,用來儲存多個相同型別的值。
// *******1.陣列名的值是陣列首元素的位址(即陣列名是指向陣列首元素的指標)
int array[5]=;
printf("array adress is %p\n",array); // array adress is 0x7fff5fbff800
printf("array[0] adress is %p\n",&array[0]);// array[0] adress is 0x7fff5fbff800
printf("array[1] adress is %p\n",&array[1]);// array[1] adress is 0x7fff5fbff804
// *******2.陣列名的值不能發生改變(預設為const型別),它只能為陣列中第乙個元素的位址
// 通過指標遍歷陣列中的元素
// p+1:指標向後移動1位(p+n:指標向後移動n位),p-1向前移動一位
int *p=array;
for (int i=0; i<5; i++)
// printf("%d\n",*(++p)); // 改變指標指向
// printf("%d\n",p+1); // 僅僅獲取下乙個元素的值(get)
printf("%d \n",p[2]);// 結果: 3 把指標當陣列用
void func(int array[5])
func(array);//實參是陣列,傳遞給形參之後,退化成指標(使用時無區別)
// 陣列中儲存int型別的指標
// 指標陣列:陣列中每個元素都是指標
int n1=10,n2=20,n3=30;
int *arr[3]=;
printf("%d \n",*arr[0]); // 10
// 陣列指標:乙個指標指向乙個陣列
int (*p1) [3] =;
printf("%d \n",p1[0]); //p1+1 移動整個陣列
記憶體分配:
靜態記憶體分配:
編譯時有系統完成,不占用cpu資源,需要在編譯前確定記憶體塊的大小。int num; int array[5];
同態記憶體分配:
程式執行時由程式設計師決定開闢空間(管理開闢,大小,釋放空間),需要占用cpu資源,malloc
(1)靜態記憶體分配:棧區:由編譯器開闢、釋放空間(區域性變數、函式形參)區域性變數:僅在當前作用域內有效。
常量區:常量,由編譯器管理
全域性/靜態儲存區:全域性變數,靜態變數也是由編譯器管理全域性變數(所有函式體外定義的變數)
靜態變數:static 記憶體不**
**區:存放函式體的二進位制**
(2)動態記憶體分配:堆區,程式執行時由程式設計師手動開闢空間(管理開闢,大小,釋放空間),需要占用cpu資源,c:malloc c++:new
malloc :由#include 提供函式
1.堆上空間沒有名稱,所以使用時必須使用指標來指向堆空間。
2.引數:在堆上開闢空間的大小(位元組)
3.使用時需要將void * 轉換成適用型別的指標
4.如果空間申請失敗,函式將返回null
示例:int * num=(int *)malloc(4);
float * num1=(float *)malloc(4);
* num=100;
* num1=100.000;
printf("%d \n",*num);
printf("%0.3f \n",*num1);
free( num);// 確認空間不被使用、釋放空間
num=null;
free(num1);
num1=null;// 注意:malloc一定要與free對應出現
常量指標,指標常量
const 修飾誰,誰不可變
// 常量指標,不可以通過指標改變位址裡的內容,但可以改變指向
int a=5;
const int * p=&a; // 常量指標
// *p=20; 位址裡的內容不可改變
int b=10;
p=&b;
int * const p1=&b; // 指標常量
*p1=20;
// p1=&a; 指標指向不可改變
引用型別
公用一塊記憶體空間,別名(引用在宣告時,必須進行初始化)
int a=5,p=200;
int &b=a;// a=b=5
b=3; // a=b=3
函式傳參傳引用,形參是實參的別名,操作記憶體是同一塊記憶體偷天換日
C語言基礎四 指標
指標表示乙個位址,什麼型別的指標就應該指向什麼型別的記憶體空間,例如int 型別的指標就應該指向乙個int型別的空間。int a 7 int p null 指標的定義 p a 指標的繫結 p 5 指標的解引用對於同型別指標p1,p2,一般有這幾種運算 p1 3,p1 3,p2 p1 int a 5 ...
C語言基礎 C語言指標 5 指標和陣列
上一節,我們補充了一點關於指標的小知識,這次我們來講講指標和陣列 首先,我們來看乙個小例子 include int main int p p ages 0 printf p d n p return 0 輸出的結果 有些人看到後,知道是可以這樣子傳值,但如果我們把整個陣列的所有元素列印出來呢?我們應...
C語言基礎(9) 指標
指標與陣列 指標變數定義的一般形式 型別 指標變數名符號 在變數宣告語句中是指標型別說明符,前面的型別用於宣告指標可以指向哪種型別的變數,稱為指標的基型別。例如 int pt1 int pt2 int a 520 int pt a 用 運算子可以獲取指標變數所指向變數的內容,該運算子被稱為指標變數間...