首先,看一段代码,来思考&a和a的差别:
int main(){
char a[5] = {'A','B','C','D'};
char (*p3)[5] = &a;
char (*p4)[5] = a; 错误
return 0;
}
我们可以清楚的了解第四行代码是错误的,那么我们将程序补充完整,再来看看编译出来的错误提醒:
#include <iostream>
using namespace std;
int main(){
char a[5] = {'A','B','C','D'};
char (*p3)[5] = &a;
char (*p4)[5] = a; 错误
cout<<p3+1<<endl;
cout<<p4+1<<endl;
return 0;
}
8 18 E:\CPP\&a.cpp [Error] cannot convert 'char*' to 'char (*)[5]' in initialization
第四行中等号两边转换的类型是不同的,左边是指向整个数组的指针,而右边是指向单个元素的指针,转换就会有错误提示。
那么,我们将代码修改如下:
#include <iostream>
using namespace std;
int main(){
char a[5] = {'A','B','C','D'};
char (*p3)[3] = &a;//error
char (*p4)[3] = a;//error
cout<<p3+1<<endl;
cout<<p4+1<<endl;
return 0;
}
7 19 E:\CPP\&a.cpp [Error] cannot convert 'char (*)[5]' to 'char (*)[3]' in initialization
8 18 E:\CPP\&a.cpp [Error] cannot convert 'char*' to 'char (*)[3]' in initialization
这样都是错误的,因为类型不同了