带括号的和不带括号的变量阅读顺序:
带括号:由括号内向外理解
不带括号:由右向左理解
一、静态数组
1、指针数组:数组内存储的是指针
定义:定义即分配空间,基本数据变量和指针皆准
int * point[constant]; //constant必须在编译阶段指定
初始化:需要给每个元素赋地址值
for(int i=0;i<constant;i++)
{
point[i] = &i;
}
2、数组指针:指向数组的指针,数组内存储的是基本数据类型
定义:
int(*point)[constant]; //实际上指向的是二维数组(可以用于以为数组),数组内存中一片连续的存储单元
初始化:
int temp[constant] = {10};
point = &temp; //将数组地址赋给指针变量,一维数组需要加取地址符
cout<< *(*(point + 0) +constant); //*(point + 0)取第0行的地址
cout<< point[0][0]; //输出数值一致
cout<< (*point)[0]; //输出数值一致,[]的优先级比*的优先级高,所以*point[0]会取首元素地址然后解引用
// *point[1]会跳过数组constant偏移量,取constant地址处的元素再解引用
注意:
&temp = temp均是指数组的首地址,temp并不是一个存储地址的变量,它代表整个数组,只是数值上等于数组地址。
3、指针数组的指针:指向数组的指针,数组内存储的是指向基本数据类型的指针
定义:
int *(*point)[constant]; //point是指针,指向数组内含有constant个int *型数据的数组
初始化:
int *temp[constant];
for(int i=0;i<constant;i++)
{
temp[i]= & constant;
}
point = &temp; //一维数组加上取地址符