C語言 const static 指標 記憶體

2021-10-09 04:47:56 字數 2809 閱讀 6138

函式指標

記憶體申請與釋放

陣列指標與指標陣列

列舉型別

int

const num =

100;

intconst

static num2 =

200;

//num = 10; 此句話error

int a=10;

int b=11;

int c=12;

//靜態指標

intconst

*pa =

&a;//*pa是乙個常量,指向位址的值不能變化

int*

const pb =

&b;//pb是乙個常量,指標無法更改指向的位址,但可以更改指向位址裡的值

intconst

*const pc =

&c;//*pc和pc都是常量,都無法更改

typedef

int*

(*pfunc)

(int

,char*)

;int

*ccstr

(int n,

char

* str)

intmain()

malloc與calloc功能相同,函式入口引數不同,calloc方便閱讀些。函式反饋的變數都是viod*型,所以需要型別轉換。

int

* p;

int size =10;

//p = (int *)malloc(size * sizeof(int)); //申請記憶體空間

p =(int*)

calloc

(size,

sizeof

(int))

;//申請記憶體空間

p =realloc

(p,100

*sizeof

(int))

;//重新分配p的記憶體空間

if(p ==

null

)free

(p);

int

** pint;

pint =

(int**

)malloc

(sizeof

(int*)

*size);if

(pint ==

null

)//申請總的後需要給各個部分申請位址

for(i =

0; i < size; i++

)//free時候先釋放小的在釋放總的

指標位址加1,則輸出陣列的下乙個值,位址變化為1個int,即一次加1,變化4個位元組。

int num2[2]

[5]=

;int

(*p2)[5

];p2 =

&num2;

printf

("%d \n"

, p2++);

printf

("%d \n"

, p2++);

printf

("%d \n"

, p2++

);

列印出p2位址變化為:

(*p2)[4]表示陣列指標(也稱行指標),一次++增加了20個位元組,由於int是4位元組,則增加了5個int,也就是說執行p+1時,p要跨過n個整型資料的長度。

*p1[4]表示指標陣列,相當於是乙個二維指標或者二維陣列。

(*p2)[4]表示陣列指標(也稱行指標),指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

enum

int;

//相當於

int num1;

int num2;

int num3;

typedef

int color;

enum color

;enum color num;

num =0;

switch

(num)

使用列舉的好處顯而易見,switch case語句只能使用常量,如果用const定義的靜態靜態變數,雖然值不會改變,但是也屬於變數,不可用於case,但enum定義的是常量,可用於case。

C 語言之 const static小結

我們都知道有const 修飾時,就意味著是唯讀不可修改的。1 欲阻止乙個變數被改變,可以使用 const 關鍵字 2 對指標來說,可以指定指標本身為 const 也可以指定指標所指向的資料為 const 或二者同時指定為 const 3 在乙個函式宣告中,const 可以修飾形參,表明它是乙個輸入引...

C 疑難問題 const static

關鍵字const 指定用其宣告的內容保持不變 1.標識變數 代替 define來宣告常量 const doble pi 3.14159 2.標識方法 標識類方法,可以防止方法修改類中不可變的資料成員 class.h class a class.cpp int getvalue const 3.con...

c語言010 指標

include int main 注意 p前面的型別決定了取位址的能力。如果是int型別的,就說明在32平台下可以取址能力是4個位元組。2 指標的本質就是儲存乙個位址,在32位的系統上,所有程式的記憶體位址都用4個位元組表示,所以不管是什麼型別的指標。指標大小都佔4個位元組。稱之為間接引用,表示根據...