C C 指標 陣列和記憶體分配

2021-08-03 06:57:50 字數 2259 閱讀 2574

指標表示的是變數的位址與值的關係:

指標的定義:int *p;//指向整型變數的指標;

struct point  point *p;

typedef int * pint; //使用pint代替int *

pint p,q; //定義了兩個指向整型的指標變數p,q;

指標變數指向變數的位址;

1.指向變數的指標

int *p; p = &n;  等同於 int *p  = &n;

2.指向陣列的指標

int  a = ;

int *p = a;

陣列中a表示是首位址,當然也可以是 &a,或者&a[0];

3.引領操作符

int m,n= 10;  int *q = &n; m = *q;

void swap(int *x ,int *y)

2、常量指標與指標常量

常量指標:

1、  int n = 10;

const int *p = &n; //不能通過之指標改變目標獨物件的值,但是可以改變指標指向;

2、void printobject(const int *p)

常量指標,不能通過指標修改數值;

指標常量:

int  n= 10;int *const p = &n;

//定義式必須初始化。

3、指向常量的指標常量

const int * const p = &n;

4、指標可以最為函式的返回值,只能返回全域性變數的指標;

/1.指標與陣列的關係

int a[8] = ;

也可以寫為: a+ i*sizeof(int);

例子:int *p = &a[5];

p+2 指向&a[7];

p-2  指向&a[3];

指標關係運算:

設p,q為指標 ( p==q )?指標是否指向同乙個位址;(p==null);是否為空指標;

2、作為函式引數時的指標與陣列

陣列形式的:

void generate(int a,unsigned int n)

指標形式的:

void generate(int *p,unsigned int n)

//*p++表示後加,執行完該語句後才加1;

3、指標與結構體

struct array

int a[8] = {};

訪問elements的第i個元素:array.elements[i]

array * parry;

(*parray).elements[i]或者parray->elements.[i];

why:靜態與自動記憶體分配必須事先了解資料物件的格式和儲存空間的大小,部分場合無法確定資料物件的大下。

示例:宣告乙個包含n個元素的整數陣列,n由使用者動態輸入決定。

標頭檔案:「cstdlib」、「cmalloc」兩者包含乙個即可

開闢記憶體: void *malloc(unsigned int size);

釋放記憶體: void  *free(void * memblock);

char *p;

p = (char *)malloc(10);

分配是個字元變數的空間;

編寫函式,複製字串

char *duplicatestring(char *s)

銷毀儲存空間

free(p) ; p = null;

int *p  =(int *) malloc(10*sizeof(int)); free(p);

char *p; p =(char *)malloc(11); free(p);

兩種方法都可以;

c++中提供了new、delete操作函式來管理動態記憶體;

動態建立單個目標物件:

int *p; p = new int; *p =10;

int *p; p = new(int); *p =10;

int *p ; p =new int (10);

int *p ; p =new (int )(10);

動態建立多個目標物件:

int *p ; p =new int[8];

釋放單個目標物件

int *p; p = new int; *p =10;  delete  p;

釋放多個目標物件

int *p ; p =new int[8]; delete  p;

指標使用的一般原則;

主動釋放原則:函式分配了記憶體,退出錢一定要主動釋放;不需要是也要主動釋放;

C C 指標記憶體分配小細節

char pc null pc new char 0 pc 0 1 相信初學者看見上面這段 都會覺得奇怪,new char n 中的n指定給指標變數分配多少記憶體空間,而n 0時代表什麼呢?其實上面的程式編譯 執行都是正確的。因為編譯器識別到指定大小為0時,會自動為其分配1byte的記憶體空間。嘗試...

C C 記憶體分配和管理

malloc 申請指定位元組數的記憶體。申請到的記憶體中的初始值不確定。calloc 為指定長度的物件,分配能容納其指定個數的記憶體。申請到的記憶體的每一位 bit 都初始化為 0。realloc 更改以前分配的記憶體長度 增加或減少 當增加長度時,可能需將以前分配區的內容移到另乙個足夠大的區域,而...

C C 記憶體分配

1 c c 記憶體分配 1 棧區 由編譯器自動分配和釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事。3 全域性 靜態 資料區 全域性變數和靜態變數的儲存是放在一塊...