C和指针之学习笔记(3)
第8章 數組
1.數組與指針
數組名是一個指針常量,也就是數組第1個元素的地址。
?
int ?a[10]; ?int ?b[10]; ?int ?*c; ?
(1)?c = & a[0]; &a[0]表示一個指向數組第1個元素的指針。
(2)?c=a; 與 c = & a[0]; 等價
(3)?b = a; 非法,不能使用賦值符把一個數組的所有元素復制到另一個數組,必須使用一個循環,每次復制一個元素。
(4)?a = c; 非法,a是指針常量,而c是指針變量。
?
2.?下標引用和間接訪問完全相同。
array[subscript] ?<==> ?*(array + (subscript)) ??(完全等價)
?
??eg:int ?array[10]; ?
??????int ?*ap=array+2;
?
(1)ap : <==> array + 2 ?<==> &array[2]
(2)*ap : <==> array[2] ?<==> ?*(array+2)
(3)ap [0] : <==> ?*(ap + (0)) ?<==> ?array[2]
(4)ap + 6 : <==> ?array + 8 ?<==> &array[8]
(5)*ap + 6 : <==> ?array[2]+6 ?
(6)*(ap + 6) : <==> ?array[8]
(7)ap [6] : <==> ?array[8]
(8)ap[-1] : <==> ?array[1]
(9)2[array] : <==> ?*(2+(array)) ?<==> ?*(array + 2)
?
3.?字符串常量的表示
(1)?char ?message1[ ] = “?hello “; ???// 初始化一個字符數組的元素
(2)?char ?*message2 = “?hello “; ????//真正字符串常量
???????指針常量message2 被初始化為指向這個字符串常量的存儲位置。
?
eg : int ?array [3][6];
數組:
5. int ?matrix [3][10];?
??matrix 這個名字的值是一個指向它第1個元素的指針,所以matrix是一個指向一個包含有10個整型元素的數組的指針。
? ?
(1)*(matrix +1) :指向整型的指針。子數組第1個元素地址。
(2)*(matrix +1)+5 :第6個元素的地址。
(3)*(*(matrix + 1) + 5 )?:<==> ?matrix [1][5]
?
6.指向數組的指針
int ?vector[10], ?*vp = vector; ?????//正確
int ?matrix[3][10], ?*mp = matrix; ???//錯誤
因為,matrix并不是一個指向整型的指針,而是一個指向整型數組的指針。
?
int ?(*p) [10]; ??//聲明一個指向整型數組的指針,p是指向整型數組的指針
int ?(*p) [10] = matrix; ?//聲明+初始化
?
指向matrix的第1個整型元素:
(1)int ?*pi = &matrix [0][0];
(2)int ?*pi = matrix[0];
?
7.指針的兼容性
(1)int ?*pt;
??int ?(*pa) [3];
? ? ? ? int ?ar1 [2] [3];
? ? ? ? int ?ar2 [3] [2];
? ? ? ? int ?**p2;
??? ??則:
?????????pt = & ar1 [0] [0] ; ?
?????????pt = ar1 [0] ;
?????????pt = ar1; ????// 非法,pt指向一個int數值,而ar1指向由3個int值構成的數組
? ? ? ? ?pa = ar1; ???//都指向int[3]
? ?pa = ar2; ???//非法,pa指向3個int構成的數組,而ar2指向2個int構成的數組
? ?p2 = &pt; ??// 都指向int *
??*p2 = ar2 [0]; ??//*p2類型為指向int的指針,所以和ar2 [0]兼容
? ??p2 = ar2; ??//非法,p2是指針的指針,ar2是指向由2個int值構成的數組的指針。
? ? ? ? ? ? ? ? ? ? ? ? ? ?因此,p2和ar2類型不同。
?
(2)將常量或非常量數據的地址賦給指向常量的指針是合法的。只有非常量數據的地址才可以賦給普通指針。
?int ?*p1;
?const ?int ?*p2;
?const ?int ?**pp2;
?p1 = p2; ?????//非法,把const指針賦值給非const指針
?p2 = p1; ?????//合法,把非const指針賦值給const指針,前提是只進行一層間接運算
?pp2 = &p1; ??//非法,把非const指針賦值給const指針
?
轉載于:https://www.cnblogs.com/clover-siyecao/p/5437937.html
總結
以上是生活随笔為你收集整理的C和指针之学习笔记(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [家里蹲大学数学杂志]第387期一套实变
- 下一篇: Web开发技巧:使用自定义数据属性创建弹