它們很像vector和迭代器,c++程式盡量用vector和迭代器,除非有速度上的要求。
一、陣列
陣列是由型別名、識別符號和維數組成的符合資料型別。
1.定義和初始化需要注意的地方
(1)陣列長度是固定的,在編譯之時就已確定好。(4)陣列不支援直接賦值和複製。(2)陣列的維數必須用值大於等於1的常量表示式定義(千萬不能用變數),此常量表示式只能包含整型字面值常量、列舉常量、用常量表示式初始化的整型const物件。換句話說就是要滿足兩個條件:
(3)陣列元素初始化時,若沒有顯式提供元素初值,則元素會被想普通變數一樣初始化:
#includeint a[3]=;//5 0 0
int b[3];//0 0 0
void main()
;//5 0 0
int d[3];//隨機
}
2.陣列操作
(1)陣列下標從0開始,型別為size_t,下標不可越界(編譯器並不檢查)二、指標(2)陣列名其值為指向該陣列的指標值(即陣列首元素按的位址值),但陣列名還包含著陣列的長度,元素的型別兩方面的資訊。作為函式引數傳遞之後,退化為指標,丟失陣列長度資訊。
1.定義與初始化
2.指標的操作而且,對於內建型別而言,int型指標只能指向int型變數。同一行定義兩個指標必須這樣:int *p1,*p2;不可這樣:int * p1,p2。所以說,定義的風格還是統一為第三種的好。int * a;
int* a;
int *a;//上面定義三種都可以
指標值為0表示他不指向任何物件,可以通過數值0或在編譯時值為0的const量以及null(cstdlib)來初始化,萬不可通過整型變數來賦值,即使它可能為0。
double obj = 3.14;
void *pd = &obj; //obj can be an object of any type
(1) 解引用生成左值【答案】2,5(2) 指標同引用的差別:這就像是指標常量與指標變數之間的差別,引用一旦定義必須初始化,之後它指向的物件就再不可改了。
(3) 指標可以指向指標
(4) 可以使用指標訪問陣列元素:在表示式中使用陣列名時,該名字會自動轉換為指向陣列第乙個元素的指標,這時要注意指標的算術操作,指標可以+(-) n(int 型),兩指標可想減,結果為ptrdiff_t型別(cstddef標頭檔案),使用下標訪問陣列時,實際上是使用下標訪問指標。int ival = 1024;
int *pi = &ival;
int **ppi = π//ppi points to a pointer to int
int *ppi = π//error,can't convert to "int *" from "int **"
【例題】寫出如下程式片段的輸出。
int a = ;
int *ptr = (int*)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
【解析】a看做指向int型別的指標,型別為int*;&a可看作指向int型別的指標,型別為int*。(&a+1)指向的是第六個位置(其實不存在)。陣列名a代表指向陣列首元素的位址,&a代表整個陣列的位址。
3.const和指標
(1)指向const物件的指標——常量指標(2)const指標——指標常量下面兩種方式定義都可以,推薦第一種。
ptr1,ptr2本身的值可以修改,所以在定義時可以不初始化,允許其被重新賦值而指向另乙個物件。const int *ptr1;
int const *prt2;
另外注意,常量指標即「自以為指向const量」的指標:
其本身的值不能修改。這意味著pa再也不能指向其他的物件。與任何const量一樣,const指標也必須在定義時初始化。int a=0;
int *const pa=&a;
4. 指標懸浮和記憶體洩露
(1) 指標懸浮,指標迷途或者 wild pointer 同指該指標指向的記憶體沒有由程式分配到這個指標之上。1. 關於字元陣列和字元指標(2) 記憶體洩露通常是由系統將記憶體分配給指標,但之後指標卻不再指向那個地方了。那塊記憶體變成一塊死記憶體了。
定義方法不同:賦值方法不同:char str[10];
char *ptr;
字元指標是變數,而陣列名是位址常量。char str[10];
str = "china";//error
strcpy(str, "china");//ok
char *ptr;
ptr = "china";
c 陣列指標和指標陣列
先記住 指標陣列 本質是陣列,資料可以用來存放int float等物件,當然也可以存放指標。例子 陣列指標,用樓上的話就是指向陣列的指標,操作指標就可以運算元組如下 int a 3 int p a printf 陣列指標 d n p 1 列印的結果為2,原因是p初始化指向了陣列a的首位址,即a 0 ...
C 筆記 C 陣列指標和指標陣列
char p 10 為陣列指標,實際上相當於二維陣列,也就是指向乙個一維陣列的指標 p可以單獨看做指向陣列的指標 比如這樣 int b 2 int cc 2 2 1,2 3,4b cc b cout 這樣的賦值是可以的,b指向的陣列的大小一定要和cc的第一維陣列大小一致,這裡輸出,4,因為b 這個時...
C語言 指標陣列和指標陣列
本質是陣列 只不過呢,它裡面存放的資料型別不是int,也不是char這類基本型別,而是乙個指標型別,說白了就是位址,所以叫指標陣列!記住 是存放指標的陣列!int p n 本質是指標 只不過是指向乙個陣列的指標,也稱之為 行指標 int p n p是乙個指標,指向乙個int型別的一位陣列,這個一位陣...