注:本文章是基於C++98的標準來寫的,有關C++11的標準的知識後續會陸續更新
1、C/C++在數組和指針方面的內容相差無幾,故有關C方面的指針也可以加以參照
2、數組的定義和初始化
定義一個數組:Int a[10];
char ch[11];
初始化一個數組:a[10] = {0};//a中的元素全部內置爲0
ch[11] = {'a'};//第一個元素爲a,其他的爲/0
因爲內置數組類型未重載 = 操作符,所以不能用一個數組直接初始化另一個數組
int b[10];
b=a;//這樣是錯誤的,編譯器在編譯階段就會報錯
3、指針的定義和初始化
指針佔了C語言的半壁江山。在C++中,指針雖然並沒有C語言中那樣重要(在C++中儘量是用引用來代替指針),但是掌握好指針是寫出高級程序的基礎。雖然指針 很難 ,但是啃下這塊硬骨頭,受益的最終還是自己。
定義一個指針:int *pa;
char *pch;
在C/C++中指針泄露或是指針錯指等問題很是令人頭疼,其中最常見的便是懸垂指針。避免懸垂指針最好的方法就是養成良好的編程習慣:指針一經定義便初始化爲0(NULL)。
初始化一個指針:pa = a;//使用數組來初始化
pch = ch;//使用數組來初始化
int m = 11;
pa = &m;//直接將指針指向一個數
4、指針和數組的應用
內置類型數組提供了下標訪問操作,可以很方便的讓我們來遍歷數組中的每一個元素
a[0] = 0;
指針的用處之一便是間接訪問,通過間接訪問我們可以取得指針所指元素的值,也可以通過間接訪問來修改指針所指向內存空間的值
int n = *pa; //n = 11;
*pa = 15;// n = 11,m = 15
5、指針和數組之間的關係
因爲數組名實際上是一個內存塊的首地址,所以我們除了以下標的方式來訪問數組中的元素外,還可以使用偏移的方式來訪問
*(a+0)=*(a);//這裏是得到數組的首元素
那麼要得到數組的第n個元素呢:
a[n-1];或是 *(a+n-1);
所以這裏我們可以看到數組和指針在某方面有一種等價的關係,知道這種關係的存在便可以讓我們做些大事
6、指針做函數參數(數組做函數參數)
先看一個例子:
在上述操作中將數組作爲實參傳遞給指針形參,然後在函數內部修改數組的值,最終將其輸出,這是指針強大之處的體現。
#include <iostream>
using namespace std;
#define NULL 0
void Array_Assign(int *p)
{
for(int i = 0;i<10;i++)
p[i] = i;
}
void Array_Display(int *p)
{
for(int i = 0;i<10;i++)
cout<<*(p+i)<<" ";
}
int main()
{
int a[10];
char ch[10];
int *pa = 0;
int *pb;
char *pch = NULL;
//給數組賦值
Array_Assign(a);
//輸出數組中的元素
Array_Display(a);
}
7、最後一點是字符串數組和指針
C++中的字符串任然沿用了C中的用法。在C++中提供了string類,我們能夠更方便的使用字符串了,但是其中的原理我們任然需要了解清楚。因爲篇幅有限,所以字符 串將單獨作爲一篇來進行詳細的講解