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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值