C語言基礎(四)指標 陣列

2021-07-23 00:23:50 字數 2563 閱讀 8709

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 用 運算子可以獲取指標變數所指向變數的內容,該運算子被稱為指標變數間...