注:本文章是基于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类,我们能够更方便的使用字符串了,但是其中的原理我们任然需要了解清楚。因为篇幅有限,所以字符 串将单独作为一篇来进行详细的讲解