extern char a[]和extern char *a

文件一中:
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中本来是字符数组,这时便会将其中的字符看作地址去访问,导致出错。
注意:声明和定义必须以相同的方式出现。

发布了31 篇原创文章 · 获赞 4 · 访问量 2451

猜你喜欢

转载自blog.csdn.net/weixin_44412429/article/details/95454639
今日推荐