文件一中:
char *a = "abc";
char b[] = "abc";
char *a1 = "abc";
char b1[] = "abc";
文件二中:
#include<iostream>
using namespace std;
extern char a[]; // 认为变量a是char数组类型 a中本来存储的是地址,却看成字符数组输出
extern char b[];
extern char *a1;
extern char *b1; //认为变量b1是char*类型 b1中本来是字符数组,却看作地址去访问
int main ()
{
cout << a << endl;
cout << b <<endl;
cout << a1 << endl;
cout << b1 <<endl;
system("pause");
return 0;
}
上述输出结果中,可以看到
当a本身定义为指针变量,声明却用数组形式时,编辑器会认为变量a是char数组类型 ,但a中本来存储的是地址,这时便会将其中存储的地址看成字符数组输出;
当b1本身定义为数组,声明却用指针形式时,编辑器认为变量b1是char* 指针类型 ,但 b1中本来是字符数组,这时便会将其中的字符看作地址去访问,导致出错。
注意:声明和定义必须以相同的方式出现。