关于两个问题:
第一个问题:数组的指针表示方法(问题来源为C++ primer 第六版内容)
//代码1
int a[10];
int (*ps)[10] = &a; // int (*)[10]
int* ps1 = a; // int *
如果将(*ps)[10] 改为(*ps)[20],会导致错误:
不能将 “int ()[10]" 类型的值分配到 "int ()[20]” 类型的实体".
将ps1 = a 更改为ps1 = &a,同样会出错
int (*)[10]" 类型的值不能用于初始化 “int *” 类型的实体",
解释:
由于指针只能指向同类型的数据。数组名被解释为第一个元素的地址,对数组名应用地址运算符时,得到的是整个数组的地址。虽然输出的地址是一致,但是意义是不一样的。
因为指针ps指向的是具有10个元素的数组,ps + 1 在内存地址上变化为10sizeof(int) 。 指针ps1 指向的是的单个元素。所以ps1 + 1 在地址上变化为 1sizeof(int)。
可以通过代码2 进行验证。
//代码2
#include<iostream>
using namespace std;
int main()
{
int a[2]{
0}; //数组元素为2
int *p {
a};
int (*p1