#include<iostream>
using namespace std;ios
int main(){c++
//const char[12]类型的值不能用于初始化char [4]
//char array[3][4]={"hello world"};数组
char array[3][4]={'h','e','l','l','o'};
//*array输出的结果是hello,即*array表示的是char*类型,而*array+1的输出是ello
cout<<&array<<" "<<&array+1<<" "<<*array<<" "<<*array+1<<endl; //&array+1相比&array向后偏移了12个字节。spa
//c++中,char* 在全部的指针类型中比较特殊。
int arrayInt[3][4]={12,13,14,25,34,23,33};
cout<<arrayInt<<endl;
//输出两项结果相同,相比整个数组首地址偏移16个字节,说明单独的二维数组名是一个int (*)[4]类型
//下面第一项是得到二维数组中第二个一维数组的地址,而第二项是得到第二个一维数组首元素的地址。???
//对数组指针引用如何理解
cout<<arrayInt+1<<" "<<*(arrayInt+1)<<endl;
//第二项的输出说明&arrayInt表示的整个二维数组的长度。
//第三项的输出与第一项的值相同,但意义不一样,第一项表示的是整个数组的首地址,第三项表示的是数组首元素arrayInt[0]的地址,是一个int*
//第四项的值为第3项的值向后偏移4个字节(1个元素)
//第五项先获取二维数组中第二个一维数组的首地址,&arrayInt[1]的类型是int (*)[4],而后加1,
//地址相对于整个数组首地址偏移32个字节。(4*4+4*4)
//要理解第四项,记住*又称为解引用,*arrayInt以后表示arrayInt的第1个元素int*
//一维数组int a[],数组名*a表示所在地址基类型的值。二维数组中*(int(*)[])得到其中内层第一个数组。以后所有转化到一维数组的范畴。
cout<<&arrayInt<<" "<<&arrayInt+1<<" "<<*arrayInt<<" "<<*arrayInt+1<<" "<<&arrayInt[1]+1<<endl;
//要理解二维数组的事情,类比一维数组进行理解。一维数组中&arr表示一个数组指针,arr表示int*
cout<<arrayInt[1]+1 <<endl; //偏移20,下标运算符获取第N个元素,这里是获取2个元素,即一个一维数组,整个数组是用其首地址来表征的。
getchar();
return 0;.net
}指针