C語言基本語法拾遺

2021-10-03 22:25:22 字數 3238 閱讀 8069

常量與指標

指標陣列:定義的變數是乙個陣列,陣列的每個元素都是乙個指定型別的指標。基本定義格式為:type*var_name[n]; 例如:

//定義乙個包含100個元素的整型指標陣列p

int*p[

100]

;//下面這種定義方式與上面等價,因為運算子優先順序高於*運算子

int*

(p[100])

;int

main()

;int i;

for(i=

0; i<5;

++i)

else

}for

(i=0

; i<5;

++i)

printf

("\n");

for(i=

0; i<5;

++i)

}return0;

}

陣列指標:定義的變數是乙個指標,該指標指向特定長度的陣列。基本定義格式:type(*var_name)[n]; 例如:

//定義乙個指向包含100個整型資料的一維陣列p

int(

*p)[

100]

;int

main()

for(i=

0; i<5;

++i)

p = num;

for(i=

0; i<5;

++i)

for(i=

0; i<5;

++i)

return0;

}

主要關注一下二維陣列做函式引數的情況。

二維陣列做函式引數時,以下情況是合法的使用方式:

int

numsum

(int num[5]

[10])

intnumsum

(int num[

10]);

或者使用陣列指標的方式:

int

numsum

(int

(*num)[10

])

又或者使用二維指標做函式形參,二維陣列做實參:

int

numsum

(int

**num,

int n,

int m)

這種情況下不能按照一般的訪問二維陣列的方式num[i][j] 獲取陣列元素的值,要按照以下手工定址的方式獲取:

*((

int*

)num + m*i + j)

;

以下使用方式是非法的:

int

numsum

(int num[

])intnumsum

(int num[5]

)

指標常量:定義的指標是乙個常量,即指標本身的值初始化之後不可再改變(因此,在定義指標常量時就須對其初始化),但可以改變該指標所指向變數(常量)的值(不能直接修改常量的值,卻可以通過指標常量修改常量的值,因此在使用時要注意,避免把常量位址賦值給指標常量,以防操作不當修改了常量的值)。定義形式:type * constvar_name; 例如:

//定義乙個整型的指標常量p,指向乙個整型變數num

int num1 =

10, num2 =12;

int*

const p =

&num1;

//非法操作,不可以修改指標常量的指向

p =&num2;

/*例2*/

const

int num =10;

int*

const p =

#//output:10,10

printf

("num = %d, *p = %d\n"

, num,

*p);

num =20;

//非法操作

*p =20;

//合法操作

//output:20,20

printf

("num = %d, *p = %d\n"

, num,

*p);

常量指標:指標本身是乙個變數,其指向乙個常量,不可以通過常量指標修改其所指向的常量的值,但可以改變常量指標的指向。定義形式:const type*var_name; 或type const*var_name; 例如:

//定義兩個常量指標p1、p2,分別指向num1、num2

const

int num1 =

10, num2 =12;

const

int*p1 =

&num1;

intconst

*p2 =

&num2;

//輸出10,12

printf

("*p1 = %d, *p2 = %d\n"

,*p1,

*p2)

;p1 =

&num2;

p2 =

&num1;

//輸出12,10

printf

("*p1 = %d, *p2 = %d\n"

,*p1,

*p2)

;//以下操作非法

*p1 =30;

*p2 =

20;

指向常量的指標常量:指標本身是常量,並且其指向的也是常量,定義時初始化之後,既不可以改變指標的指向,也不可以改變其所指向的值(無論其初始化時指向的是變數還是常量)。定義形式:*const type const

var_name; 例如:

int num1 =10;

const

int num2 =10;

const

int*

const p1 =

&num1;

const

int*

const p2 =

&num2;

//以下試圖改變p1、p2的指向或改變其所指向的值都是非法的

p1 = p2;

*p1 =30;

*p2 =

20;

python 基本語法 拾遺

django 開發中一般見到的python 內部類,最多是在model 設計過程中。所謂內部類,就是在類內部定義的類,主要目的是為了更好的抽象現實世界。內部類的距離 汽車是個類,汽車的地盤,輪胎也可以抽象為類,將其定義到汽車類中,則形成了內部類,更好的描述汽車類,因為底盤,輪胎是汽車的一部分 一般不...

C語言拾遺

main函式引數 c語言規定main函式引數只能有兩個,習慣上這兩個引數寫成argc和argv。c語言還規定argc必須是整形變數,argv必須是指向字串的指標陣列。因此,main函式的函式頭應該寫為 main argc,argv int argc char argv 或者 main int arg...

C語言拾遺

保證某些全域性變數的常量性 c c 中不能通過變數來定義陣列 const int row 10 const int col 10 c define row 10 define col 10orenum c style型別轉換 new type expression static cast expre...