c++ 全局变量

char *a =(char*)malloc(sizeof(char));
//*a = 'a'; ///???
int main()
{
*a = 'b';
cout<<*a<<endl;
system("pause");
return 0;

}
为什么在main函数里可以赋值,在函数外就会提示错误呢?

C/C++语言中能够被顺序执行的控制流代码只能写在函数作用域内,在函数作用域以外之处写赋值语句自然出错。这个规定从某种意义上强调了结构化程序设计的思想(顺序的语句必须通过写到函数内成为模块化的代码通过main函数这类入口进行调用,而不是在一个源文件依据语句的位置被执行)。顺便:char *a =(char*)malloc(sizeof(char));这种写法在这里不是赋值,而是初始化(C++中用char *a((char*)malloc(sizeof(char)))这种构造函数的写法与此等价)。
LS错误。main函数只是标准规定的一个形式上的控制流入口,其中代码基本上不可能是实际被首先执行的。例如,全局对象和文件/命名空间作用域定义的静态对象的初始化是在进入main函数之前的代码中进行的。这些代码由平台(编译器和操作系统)实现,负责初始化进程开始的一些系统资源,然后是初始化全局和文件/命名空间作用域静态对象,对用户隐藏(或者更具体点地说,源程序里面没有对应代码,除了初始化以外也无法通过语言本身进行显式地控制)。
====
[原创回答团]

参考资料:原创

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-28
在c语言中。在main之外写的语句,电脑会去扫描,但不会真正的去运行。就像做个记录一样。
关于变量。是全局的,虽然每个函数体都可以去调用用它。但是只有在main之内的才可以运行。(就如同机器开启了)

注意:程序首先是运行main的第一条数据。
main中如果包含有函数体(当然这个函数体是写在main之外的),这个函数体包含有你的那个全局变量,这时程序才会去运行你的那个函数体的全局变量。
记住main函数是树干。运行的起源。
有什么不懂在说吧。我来。
第2个回答  2010-09-28
因为全局变量是所存放静态存贮区,直到程序结束才能释放空间,
而动态分配空间属于动态存贮区,是根据程序运行区间动态分配存贮空间的。
第3个回答  2010-09-29
全局变量就是所有在这个变量定义下面的函数都可以使用而且每次使用的值都会随程序的赋值而改变,若无赋值则为最后一次赋值的值
第4个回答  2010-09-28
全局变量在函数外只能在初始化时赋值
第5个回答  2010-09-28
变量只能在函数外定义
赋值必须在函数内
这是规定

如何在C++中设置全局变量?
1、首先,定义一个实现加法运算自定义函数。2、接着,定义一个实现乘法运算的自定义函数。3、最后,在主函数中实现程序的运算。4、定义在函数外部没有被花括号括起来的变量称为全局变量,全局变量的作用域从变量定义的位置开始一直到文件结束。5、如果在一个程序中多个函数都要对同一个变量进行处理,可...

C++中有几个全局变量命名空间?
在C++中,命名空间是由关键字`namespace`和命名空间名组成。命名空间内部可以定义变量、函数和其他类成员。例如,在上面的代码示例中,`mm`命名空间包含一个全局变量`i`,其值为5。同样,全局变量`i`在程序外的作用域内具有默认值10。通过在不同的命名空间中定义变量,可以防止不同部分的代码之间出现...

C++中main函数内的变量是全局的么?
(1)main函数内的变量不是全局变量,而是局部变量。(2)只不过它的生命周期和全局变量一样长而已。(3)全局变量一定是定义在函数外部的。函数分类 从用户使用的角度看,函数有两种:1、标准函数,即库函数。这是由系统提供的。2、用户自定义的函数。可以解决用户的专门需要。二、从函数的形式看,函...

C++全局变量初始化
C++标准规定,全局或静态对象仅在首次使用时进行构造,并通过atexit()管理对象的生命期,在程序结束时按FILO顺序调用相应的析构操作。全局变量、文件域的静态变量和类的静态成员变量在main执行前进行静态初始化,分配内存并初始化。局部静态变量在第一次使用时分配内存并初始化。这里的变量涵盖了内置数据类型...

C++ 全局变量和全局静态变量有什么区别?
1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量。2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。3. 全局变量、静态...

深入分析C++全局变量初始化
深入分析C++全局变量初始化 在C++开发中,理解全局对象的初始化顺序至关重要,这关系到程序的稳定性和健壮性。例如,当两个动态库之间存在全局对象的引用时,引用的对象未完成初始化可能会导致程序崩溃。程序启动入口通常为main函数,但在main之前,会先执行全局对象的构造函数。通过在gdb中设置断点并运行,...

C++ 全局变量和全局静态变量有什么区别呢
C++ 全局变量和全局静态变量的根本区别还是作用域的区别。1、全局变量是不显示用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量;2、全局静态变量是显示用static修饰的全局变量,作用域是...

c++全局变量extern
extern在C++中用作声明变量或函数在其他文件中被定义,帮助编译器在链接时查找定义。在不同文件共享变量和函数定义时,extern确保了代码的可移植性。例如,若文件a.cpp和b.cpp都需要使用全局变量g_var,可在a.cpp中定义g_var,并在b.cpp中使用extern声明g_var,实现文件间变量共享。同样,extern用于...

VC+++ 全局变量的定义
【原创】下面是对C++作用域的几个总结:按照作用域来分,有两种变量:全局变量和局部变量,全局变量是在所有函数体外部声明的,局部变量则是局限于一个函数,局部变量也叫自动变量,即auto修饰符,但这个修饰符是自动的,所以不用写;局部变量还可以有一个修饰符register,叫寄存器变量,注意,这个修饰符...

vc中如何定义全局变量
在Visual C++(VC)中定义全局变量,可以将其放置在任意文件中,但需确保不在函数内部定义。这样做允许在程序的不同部分访问和使用该变量。为了在其他文件中访问全局变量,可以在定义变量的文件中使用`extern`关键字进行声明,表示这个变量在其他位置定义。或者,在App类中声明一个公有成员变量,确保所有类都...

相似回答
大家正在搜