一、指针数组
可以理解为指针的数组,即元素为指针的数组
请看如下几组例子:
char *p = "abc";
char *q = "kk";
char *a[] = {p,q}; //指针数组
cout << "a为: "<<a << endl;
cout << "*a为: " << *a << endl;
cout << "a+1为: " << a + 1 << endl;
cout << "*(a+1)为: " << *(a + 1) << endl;
cout << "*a+1为: " << *a + 1 << endl;
结果为:
关于a的初始化:
char *p, *q;
char *a[] = {p,q}; //不能通过编译
p="abc";
q="kk";
因为上面例子中指针数组中的元素p和q未被初始化,不能通过编译.
关于a的赋值:
char *p = "abc";
char *q = "kk";
char *r = "rr";
char *a[] = {p,q}; //指针数组
*a=r; //正确的赋值操作,等同于将r赋给p 等同于 a[0]=r;
*(a+1)=r; //给a的第二个元素赋值 等同于a[1]=r;
a的大小sizeof(a) = 元素个数 * 地址长度(32位为4,64位为8)
二、数组指针
数组指针,即指向数组的指针,常用于指向二维数组
如下代码:
#include <iostream>
using namespace std;
int main()
{
int a[2][6] = { { 1, 2, 3, 4, 5, 6 }, { 11, 12, 13, 14, 15, 16 } };
int(*p)[6] = a;
cout << "p的大小为:" << sizeof(p) << endl;
cout << "**p为:" << **p << endl; //首个元素的值
cout << "*p为:" << *p << endl; //首个元素的地址
cout << "p[0]为:" << p[0] << endl;//首个元素的地址
cout << "p为:" << p<< endl; //首个元素的地址
cout << "a[0][1]元素表示为*(*p+1) :" << *(*p + 1) << endl;
cout << "a[0][1]元素表示为*(p[0]+1) :" << *(*p + 1) << endl;
cout << "a[1][0]元素表示为**(p+1) :" << **(p + 1) << endl;
cout << "a[1][0]元素表示为*(p[1]) :" << *(p[1]) << endl;
system("pause");
}
执行结果如下: