extern char a[]和extern char *a

博客指出,当变量定义和声明方式不一致时会出现问题。如变量a定义为指针变量,声明用数组形式,编辑器会将地址看成字符数组输出;变量b1定义为数组,声明用指针形式,会将字符看作地址访问导致出错,强调声明和定义须以相同方式出现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值