C语言 extern 数组

在一个文件中定义一个字符数组 (如 char data[100] ),在另一个文件使用extern引用的方式。

test.cpp

// char data[100] = {10};
char data[100] = {0, 0, 0, 0,1};
char data[100] = {0, 0, 0, 1};

main.cpp

#include <iostream>
#include <string.h>
extern char *data;
//extern char data[];

int main(int argc, char** argv) 
{
    const char *src = "123456789";
//  strncpy(data, src, strlen(src));
//  for (int i = 0; i < strlen(src); ++i) {
//      std::cout << data[i] << std::endl;
//      
//  }
    std::cout << (unsigned int)data << std::endl;
    return 0;
}
如果在main文件中使用extern char *data, 编译不回出错,先让char data[100] = {10};, 然后打印data的值是10, 所以猜测main文件中data的值是test文件data指针指向地址内容,继续验证让char data[100] = {0, 0, 0, 0,1};,打印的值是0,再让char data[100] = {0, 0, 0,1};,打印的值是16777216(就是小端模式下的 0x1000000),所以引用方式是错误,编译器把数组的内容解释为指针值(地址),只取数组的前4个字节(32位模式)。
应该保持类型匹配,使用extern char data[],编译器就会把data值设置为数组首地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值