您好,登錄后才能下訂單哦!
1.數組的本質是一段連續的內存空間
2.數組的空間大小為
sizeof(array_type)*array_size
3.數組名可看做指向數組第一個元素的常量指針
4.指針是一種特殊的變量,與整數的運算規則為:
p+n;=(unsigned int)p+n*sizeof(*p);
結論:
當指針p指向一個桶類型的數組的元素時;p+1將指向當前元素的下一個元素;p-1將指向當前元素的上一個元素。
5.指針之間只支持減法運算,且必須參與運算的指針類型必須相同
p1-p2;=((unsigned int)p1-(unsigned int)p2)/sizeof(type);
注意:
1.只要當兩個指針指向同一個數組中的元素時,指針相減才有意義,其意義為指針所指元素的下標差
2.當兩個指針指向的元素不在同一個數組中時,結果未定義。
1.指針也可以進行關系運算
2.指針關系運算的前提是同時指向同一個數組中的元素
3.任意兩個指針之間的比較運算(==,!=)無限制
4.以指針形式和數組下標形式訪問數組時,當指針以固定增量在數組中移動時,其效率高于下標產生的代碼
5.當指針增量為1且具有硬件增量模型時,表現更佳。
a和&a的區別
1.a為數組是數組首元素的地址
3.&a為整個數組的地址
3.a和&a的意義不同其區別在于指針運算
a+1;=(unsigned int)a+sizeof(*a)//指向數組的第一個元素 &a+1;=(unsigned int)(&a)+sizeof(*&a)//指向整個數組后的第一個元素
在C語言中,數組作為函數參數時,編譯器將其編譯成對應的指針
void f(int a[]);=;void f(int* a); void f(int a[5]);=;void f(int* a);
結論:
一般情況下,當定義的函數中有數組參數時,需要定義另外一個參數來標定數組的大小。
#include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int* p1 = (int*)(&a + 1); //指向數組后的第一個元素 int* p2 = (int*)((int)a + 1);//指向第一個字節的第一位 int* p3 = (int*)(a + 1);//指向第一個元素 printf("%d, %d, %d\n", p1[-1], p2[0], p3[1]); return 0; }
總結:
1.數組聲明時編譯器自動分配一段連續的內存空間
2.指針聲明時只分配了用于容納指針的4字節空間
3.在作為函數參數時,數組參數和指針參數等價
4.數組名在多數情況下可以看做時常量指針,其值不能改變
5.指針的本質是變量,保存的值被看做內存中的地址
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。