c语言中全局变量在不同文件中的引用(一)
2012-08-22 22:43
381 查看
c语言中在某个文件中定义的全局变量可以在不同的文件中引用,对数组和指针这两种全局变量在使用时必须要注意,外部引用格式不正确时会出现编译或运行错误。下面通过不同的例子来说明数组和指针类型全局变量的引用。
编译时会出现下面错误,说明在test2中的extern引用的a实际上是一个变量,而不是一个数组,在第10行会出现编译错误。
example2:
此例编译和运行都没有任何问题,运行结果为3。说明extern引用的a就是在test1.c中定义的数组。
example3:
此例在编译时没有任何问题,但是运行时会出现野指针访问错误,因为此处a被认为是外部定义的一个指针变量,但是这个指针变量并没有指向某个对象,所以在运行过程中会出现随机访问内存的情况。
本文出自 “飞翔的云” 博客,请务必保留此出处http://coldcloudy.blog.51cto.com/5797907/970380
一、全局变量为数组
example1:test1.c int a[10] = {1,2,3,4,5}; test2.c #include <stdio.h> #include <stdlib.h> extern int a; int main() { printf("%d\n", a[2]); return 0; }
编译时会出现下面错误,说明在test2中的extern引用的a实际上是一个变量,而不是一个数组,在第10行会出现编译错误。
error: subscripted value is neither array nor pointer
example2:
test1.c: int a[10] = {1,2,3,4,5}; test2.c: #include <stdio.h> #include <stdlib.h> extern int a[]; int main() { printf("%d\n", a[2]); return 0; }
此例编译和运行都没有任何问题,运行结果为3。说明extern引用的a就是在test1.c中定义的数组。
example3:
test1.c: int a[10] = {1,2,3,4,5}; test2.c: #include <stdio.h> #include <stdlib.h> extern int *a; int main() { printf("%d\n", a[2]); return 0; }
此例在编译时没有任何问题,但是运行时会出现野指针访问错误,因为此处a被认为是外部定义的一个指针变量,但是这个指针变量并没有指向某个对象,所以在运行过程中会出现随机访问内存的情况。
本文出自 “飞翔的云” 博客,请务必保留此出处http://coldcloudy.blog.51cto.com/5797907/970380
相关文章推荐
- 两个不同的文件相互引用全局变量
- c语言工程里其它文件引用全局变量?
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- 初始化全局变量实例说明C语言中初始化和未初始化的全局变量所在不同的段
- (vs2008链接错误LK200x:xxx在yyy.obj中已定义或xxx在yyy中以被引用):一个全局的变量想在多个cpp文件中使用
- C语言全局变量多文件使用
- 记录自已学习之头文件的全局变量引用
- python在不同文件之间共享全局变量方案的探讨
- [C语言]防止头文件和全局变量重复定义
- 实例说明C语言中初始化和未初始化的全局变量所在不同的段
- C语言中跨文件的全局变量
- C语言 变量的跨文件引用
- C语言全局变量多文件使用
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- 关于c语言不同文件之间直接函数接口引用的简介
- 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- C语言:全局变量在多个文件中的使用方法
- C语言引用汇编代码里的全局标号或变量
- c语言中头文件的建立与使用-函数、全局变量、全局数组