首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你能在C++中将指针声明为extern吗?

当然可以。在C++中,您可以将指针声明为extern,以便在其他文件中定义该指针。这样做的一个常见用途是在多个文件中共享全局变量。以下是一个简单的示例:

假设我们有一个名为main.cpp的文件,其中包含以下内容:

代码语言:cpp
复制
#include<iostream>

extern int *ptr;

int main() {
    std::cout << "Value of *ptr: " << *ptr<< std::endl;
    return 0;
}

在另一个名为other.cpp的文件中,我们定义了ptr的值:

代码语言:cpp
复制
int x = 10;
int *ptr = &x;

在这个例子中,我们在main.cpp中声明了一个名为ptr的指针,并使用extern关键字表示该指针将在其他文件中定义。然后,在other.cpp中,我们定义了ptr并将其指向一个整数变量x

要编译这个程序,您需要将这两个文件一起编译,例如:

代码语言:sh
复制
g++ main.cpp other.cpp -o main

编译完成后,您可以运行生成的可执行文件,它将输出ptr指向的值:

代码语言:sh
复制
./main

输出:

代码语言:txt
复制
Value of *ptr: 10

这就是如何在C++中将指针声明为extern

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

浅谈CC++中的指针和数组(一)

浅谈C/C++中的指针和数组(一)       指针是C/C++的精华,而指针和数组又是一对欢喜冤家...一般最初学习C/C++的时候接触到的都是这类教程,学习效果可想而知。...对于初学者选择好的教程真的很关键,因为先入为主,一旦接受了错误的观点或者思想即使后来知道了也一时很难纠正过来(我是深有体会),在此我推荐三本很适合于初学者的教程:        《The C Programming...大家可以想一下如果在file1.c中将p定义为指针类型,而在file2.c中将p声明为数组类型,会是什么情况? ? 解决上述问题的办法就是在任何时候保持定义和声明一致。...测试程序: file2.c #include extern char p[]; extern void print(); int main(void) { printf("

85550

C++复习笔记——C++ 关键字

enum enum(枚举)类型,给出一系列固定的值,只能在这里面进行选择一个。 operator operator(操作符)用于操作符重载。这是 C++ 中的一种特殊的函数。...在这种类型的构造函数中可以将初始长度作为参数传递给构造函数。 private private(私有的),C++ 中的访问控制符。被标明为 private的字段只能在本类以及友元中访问。...protected protected(受保护的),C++ 中的访问控制符。被标明为 protected的字段只能在本类以及其继承类和友元中访问。...使用这种情况有两种形式: extern "C" 声明语句 extern "C" { 声明语句块 } public public(公有的),C++ 中的访问控制符。...在 C++ 类的成员变量被声明为static(称为静态成员变量),意味着它被该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员

1.3K30
  • C语言深入理解extern用法 | 变量声明 | static

    不能使用extern char* g_str;来声明。extern是严格的声明。且extern char* g_str只是声明的一个全局字符指针。 注:声明可以拷贝n次,但是定义只能定义一次。...被extern “C”限定的函数或变量是extern类型的: extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用...与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。...实现C++与C及其它语言的混合编程: 被extern”C”修饰的变量和函数是按照C语言方式编译和连接的,未加extern “C”则按照声明时的编译方式。...(2)在C中引用C++语言中的函数和变量时,C++的头文件需添加extern”C”,但是在C语言中不能直接引用声明了extern”C”的该头文件,应该仅将C文件中将C++中定义的extern”C”函数声明为

    1.3K30

    C语言深入理解extern用法 | 变量声明 | static

    不能使用extern char* g_str;来声明。extern是严格的声明。且extern char* g_str只是声明的一个全局字符指针。 注:声明可以拷贝n次,但是定义只能定义一次。...被extern “C”限定的函数或变量是extern类型的: extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用...与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。...实现C++与C及其它语言的混合编程: 被extern”C”修饰的变量和函数是按照C语言方式编译和连接的,未加extern “C”则按照声明时的编译方式。...(2)在C中引用C++语言中的函数和变量时,C++的头文件需添加extern”C”,但是在C语言中不能直接引用声明了extern”C”的该头文件,应该仅将C文件中将C++中定义的extern”C”函数声明为

    1.7K60

    初级程序员面试不靠谱指南(一)

    乔峰一招打出,人人都是情不自禁的喝了一采!这满堂大采之后,随即有许多人觉得不妥,这喝采,是赞誉各人欲杀之而甘心的胡虏大敌,如何可以长敌人志气,灭自己威风?...,这就像内功和武功一样,只有积累的更深的内功,能在实际工作中得心印手,哪怕使用最简单的编程方法,程序的效率和可读性也比别人强。      ...假设我在file1.c中定义了一个全局变量const int i = 2;如果我想在另外一个文件file2.c使用这个值,需额要使用extern const int i;但是如果是在C++中,你想做同样的事情...,必须在fiel1.cpp中使用如下语句extern const int i=2;为什么会这样呢?...如果下面的解释不能让清楚的明白,那么,请先记住一点好了:在C语言中,一个const value在全部工程(程序)范围内都是可见的,而C++中const value只能在定义的这个文件中是可见的。

    87990

    【CC++】extern 的一些注意事项

    前言 前些日子,有友友问了我这样的一道问题: 数组通过外部声明为指针时,数组和指针是不能互换使用的;那么请思考一下,在 A 文件中定义数组 char a[100];在 B 文件中声明为指针extern...具体分析 了解了数组与指针的区别之后,让我们来看看 extern 声明全局变量的内部实现; extern 是 C/C++ 语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用...与 extern 对应的关键字是 static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被 extern "C" 修饰。...所以,可以用一句话概括 extern "C" 这个声明的真实目的:实现 C++ 与 C 及其它语言的混合编程。...后记 以上就是 【C/C++extern 的一些注意事项 的全部内容了,希望对大家有所帮助!

    35510

    C++ 温习笔记(2) - extern,预处理命令#pragma,static

    在一个源文件里定义了一个数组:char a[6];   在另外一个文件里用下列语句进行了声明:extern char *a;   请问,这样可以?   ...答案与分析:   1)、不可以,程序运行时会告诉非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。...extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。   ...extern “C” extern “C”的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。...在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值。 静态成员的值对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。

    70210

    C++编程基础与高级编程

    您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。...C++中每个变量指定类型,类型决定了变量存储的大小和布局。 变量名字:必须是以字母和下划线开头。 extern关键字在任何地方声明变量。...extern变量对所有程序都可见。 如果两个或多个文件共享相同的变量或函数,则使用它。 多维数字示例 数组 C++中声明一个数组,需要制定元素的类型和元素的数量。...C++ Null指针C++支持空指针。NULL指针是一个定义在标准中的值为零的常量。 C++ 指针的算术运算:可以指针进行四种算术运算:++,–,+,- C++ 引用 不存在空引用。...C++ 抽象类 抽象类是在C++中实现抽象的方式。C++抽象类是隐藏内部细节和仅显示功能的过程:抽象类和接口 在C++中将其函数中的至少一个声明为纯虚函数,使其变得抽象。

    1.9K30

    static用法详解

    C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 为什么要引入static?   ...(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就产生了一个意想不到的好处:成为一个callback函数,使得我们得以将C++和C-based X Window系统结合...如果一个成员被声明为static,它就能够 在它的类的任何对象创建之前被访问,而不必引用任何对象。可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。...因为在程序开始执行时必须调用main() ,所以它被声明为static。   声明为static的变量称为静态变量或类变量。...举例   如果需要通过计算来初始化的static变量,可以声明一个static块,Static 块仅在该类被加载时执行一次。

    1.2K90

    《C++Primer》第二章 变量和基本类型

    如何选择类型 明知数值不可能为负时则选用无符号类型 一般用int执行整数运算(因为short太短而long一般与int有相同的尺寸),如果的数值超过了int的表示范围则选用long long 执行浮点数运算时选用...变量声明与定义的关系 C++支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可独立编译。 为了支持分离式编译,C++将定义和声明区分开。...extern int i; // 声明i而非定义i extern int i = 1; // 定义i, 这样做抵消了extern的作用 复合类型 1....C++11新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,且必须用常量表达式初始化。 处理类型 1....一般而言C++程序员应该使用cname的头文件而非name.h的形式,标准库中的名字总能在命名空间std中找到,如果使用name.h则程序员不得不时刻牢记从属于C还是C++

    54110

    每个开发者都应该了解的一些C++特性

    后来,C++ 决定做出改变,然后发展至今,成了编程社区最受欢迎的语言之一。C++ 有一些新特性非常好用,本文对此进行了介绍,比如 auto、lambda、constexpr、tuple、智能指针等。...记住,当使用 auto 时,必须确保的编译器可以通过某种方式推断数据类型。 现在问题来了,如果我写 auto a = {1, 2, 3} 会发生什么?会有编译错误?这是向量?...因此,如果你想在 lambda 函数中将数据转换成其他形式,可以像下面这段代码一样,利用作用域来使用 lambda。 ?...在上面的例子中,如果在 lambda 表达式中使用 [factor] 取值的方式获取了局部变量,就不能在第五行中修改 factor,因为没有权利这样做。不要滥用你的权限!...std::tuple user2("M", "Chy", 25); 如果不熟悉 C++模版,那么上述特性可能对来说不是很好理解。 智能指针 指针也可能并不好用。

    76320

    Python嵌入CC++进行开发详解

    如果你想把Python嵌入C/C++中是比较简单的事情,需要的是在VC中添加Python的include文件目录和lib文件目录。下面我们来看下如何把Python嵌入C/C++中。...代码如下: 在debug下执行出错,“无法找到python31_d.lib文件”,后查到原因是:在debug下生成必须要有python31_d.lib文件,否则只能在release下生成 #include...PyRun_SimpleFile函数可以用来运行”.py”脚本文件,函数原型如下: int PyRun_SimpleFile(FILE *fp, const char *filename); 其 中fp是打开的文件指针...file.py’)”); //使用execfile来运行python文件 Py_BuildValue()用于对数字和字符串进行转换处理,变成Python中相应的数据类型(在C语言中,所有Python类型都被声明为...(2)如果采用C++的工程,那么导出的接口需要extern “C”,这样python中才能识别导出的函数。

    1.3K50

    C++知识总结

    的应用 C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言中除了该作用还可以声明extern “C”声明一段代码编译连接的方法为C语言的方法。...对于返回一个流指针则不能连续使用<<操作符。 因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。...指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 4....C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。...这就如同前面说的,不断地告诉出租车司机要去的目的地,然后司机把送到你要去的地方。

    1K40

    《逆袭进大厂》之C++篇49问49答

    相同变量可以在多处声明(外部变量extern),但只能在一处定义。 13、哪几种情况必须用到初始化成员列表? 初始化一个const成员。 初始化一个reference成员。..."的用法 为了能够正确的在C++代码中调用C语言的代码:在程序中加上extern "C"后,相当于告诉编译器这部分代码是C语言写的,因此要按照C语言进行编译,而不是C++; 哪些情况下使用extern...所以使用extern "C"全部都放在于cpp程序相关文件或其头文件中。 总结出如下形式: (1)C++调用C函数: //xx.h extern int add(...)...,派生类的虚表指针指向的是基类的虚表;当派生类对基类的虚函数重写时,派生类的虚表指针指向的是自身的虚表;当派生类中有自己的虚函数时,在自己的虚表中将此虚函数地址添加在后面 这样指向派生类的基类指针在运行时...protected的变量和函数只能在类的内部和其派生类中访问。 private修饰的元素只能在类内访问。

    2K10

    C和C++混合编译,externextern C

    extern的问题在于不知道这个关键字出现的时候到底是声明还是定义。  谨记:声明可以多次,但是定义只能有一次。...当你要引用一个全局变量时,就要声明extern int a;这个时候extern不能省,否则就成定义了。...被extern “C”修饰的函数或者变量是按照C语言方式编译和链接的,所以可以用一句话来概括extern “C”的真实目的:实现C++与C的混合编程。...(2) C中引用C++语言中的函数或者变量时,C++的头文件需要加上extern “C”,但是C语言中不能直接引用声明了extern “C”的该头文件,应该仅在C中将C++中定义的extern “C”函数声明为...因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果有兴趣可以去网上搜索,相信可以得到满意的解释!

    3.5K11

    《逆袭进大厂》之C++篇49问49答(绝对的干货)

    相同变量可以在多处声明(外部变量extern),但只能在一处定义。 13、哪几种情况必须用到初始化成员列表? 初始化一个const成员。 初始化一个reference成员。..."的用法 为了能够正确的在C++代码中调用C语言的代码:在程序中加上extern "C"后,相当于告诉编译器这部分代码是C语言写的,因此要按照C语言进行编译,而不是C++; 哪些情况下使用extern...所以使用extern "C"全部都放在于cpp程序相关文件或其头文件中。 总结出如下形式: (1)C++调用C函数: //xx.h extern int add(...)...,派生类的虚表指针指向的是基类的虚表;当派生类对基类的虚函数重写时,派生类的虚表指针指向的是自身的虚表;当派生类中有自己的虚函数时,在自己的虚表中将此虚函数地址添加在后面 这样指向派生类的基类指针在运行时...protected的变量和函数只能在类的内部和其派生类中访问。 private修饰的元素只能在类内访问。

    2.6K40

    C++变量的存储说明符和cv-限定符

    C++中创建变量时,前面有时会有一些修饰符,这里总结一下。 大体分为两个类别:存储说明符和cv-限定符。...one_file = 50;// 在函数外使用static声明,只在文件内各个函数可使用 void func (int n) { static int count = 0;// 在函数内用static声明,只能在函数内使用...,但是无论函数是否执行,变量都存在,且多次调用时其值不会重新初始化,而是保持上一次的结果 int lama = 0;// 普通变量,只能在函数内使用,函数不执行就不会存在 } 函数内创建与外部静态变量同名的变量时...修饰的变量表示引用声明,假设文件1明了一个外部变量,文件2要使用它,必须使用extern来修饰,因为不能创建两个同名的外部变量,如上文所述。...因为假设指针指向某个硬件位置,其中包含来自串行端口的时间或信息,这就有可能硬件本身改变它,而不是程序去改变它。 那为什么要告诉程序它可能变化呢?

    62110

    CC++ const

    const是C语言的关键字,经C++扩充,功能变得强大,用法复杂。const用于定义一个常变量(只读变量)。当const与指针、引用、函数等结合起来使用时,情况会变得更加复杂。...(2)只有类的非静态成员函数可以被申明为常函数,原因是静态成员函数不含this指针,属于类级别的函数。其它类型的函数(如外部函数等)不能被申明为常函数。...C++把this指针也作为参数评估的一部分,由于上面的函数被定义成class A的成员函数,那么它们最终会被看作void disp(A*)和void disp(const A*),从而构成重载。...>中还提到,通常C++编译器并不为const变量创建存储空间,相反它把这个定义保存在它的符号表里,除非像extern const int a;使用extern进行定义(另外一些情况,...但是如果在定义const变量时使用extern,那么说明该const变量具有外部连接性,促使C++编译器为const变量分配存储空间,看来extern与const结合时的用法很是耐人寻味啊。

    86810
    领券