• 2016-9-22题目:extern char* 与char[]


    假如file1.cpp定义了一个char[]全局数组:

    char c[] = {'a','b','c'};
    
    

    然后在同工程的另一个文件file2.cpp这般extern:

    #include <cstring>
    #include <iostream>
    using namespace std;
    
    //extern char c[]; //正确extern 
    extern char *c; //错误,char[]和char*是两种东西,编译不通过,或者某些编译器可以通过但是运行崩溃
    
    int main()
    {
    	cout<<c<<endl; 
    	
    	return 0;
    }
    结果如何?

    需要注意,char[]和char*是两种不同的定义,不能相互替代,所以extern声明了一个char*数组,并告诉编译器它原本的定义在别的工程下文件可以找到,但结果编译器找不到char*的定义,只有个不能匹配char* 的 char[]的定义,所以按理说编译应该会报无法找到外引用的变量的错误。某些编译器可能会编译通过,但是运行崩溃,因为cout<<c<<endl;试图输出一个找不到定义的c。

    另外,备忘个知识点:

    全局变量必须初始化,例如:

    const int a; //编译错误:全局变量必须要被初始化 
    正确写法要给它初始化:

    const int a = 1
  • 相关阅读:
    购物菜单
    数据库
    增删改查
    页面交互
    计算器
    2020.9.21
    团队-团队编程项目中国象棋-项目总结
    团队-团队编程项目作业名称-最终程序
    课后作业-阅读任务-阅读提问-4
    《20171130-构建之法:现代软件工程-阅读笔记》
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586367.html
Copyright © 2020-2023  润新知