C语言如何跨文件调用函数定义中声明的变量
2017-12-01 14:29
786 查看
变量的作用域
我们知道,变量根据其作用域有全局变量和局部变量之分。全局变量作用域是整个文件,并且可以使用关键字 extern 达到跨文件调用的目的。但是局部变量值作用于它当前所在的块(即该变量所处最内层中括号之间的区域),当函数执行完并离开当前块后,局部变量及其所处内存空间的值就会销毁。我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
static 关键字
static + 变量声明 表示声明的这个变量是静态变量。静态不是说它的值不会被改变,而是它在内存中的地址静止不动,这也就意味着它的值从一直到函数运行结束之前,都不会被销毁。有趣的是,它声明的的变量只会声明一次,再次调用声明语句时,会自动跳过这条语句。如下面这段代码:#include <stdio.h> int main() { int i = 0; printf("num1\tnum2\n"); for(i = 0;i<4;i++) { static int num1 = 4; int num2 = 4; num1 ++; num2 ++; printf("%d\t%d\n",num1,num2) } }
运行结果为:
可以看到static初始化的num1变量,虽然我们放在循环中,看起来好像每次都会对变量进行初始化,但是结果却出人意表,num1在循环中没有受到初始化语句的影响,可以正常的进行运算。
指针
指针是一个值为内存地址的变量(或数据对象)。指针本身是不具有内存的,但是它可以通过赋值,指向其他变量的地址进而得到它的内存。因为在计算机中,所有的变量都会有单独一块内存空间,所以理论上,只要使用指针指向变量的地址,就可以在程序的任何位置调用变量。所以,指针是我们实现跨文件跨域调用变量最重要的手段。
使用指针跨文件调用变量
有了上面的基础,我们就可以开始调用变量了。为了表现跨文件的功能,我们定义一个头文件 test.h,并且在里面放入一个函数声明
void Input();,然后我们再创建一个
test.c文件来作为头文件的实现文件。最后在主文件
main.c中调用它,函数代码如下:
test.c文件
#include "test.h" int *ptr; //声明一个外部指针用来调用变量 void Input() { //初始化一个静态的数组 static int nums[10] = {1,2,3,4,5,6,7,8,9,10}; ptr = nums; //将外部指针指向数组首地址 }
main.c文件
#include "test.h" //引用我们自定义的头文件 #include <stdio.h> extern int *ptr; //调用我们的外部指针 int main() { Input(); //初始化数组并给指针赋值 //下面打印结果,验证是否成功调用变量 for(int i = 0;i<10;i++) { printf("%d\t",*(ptr + i)); } }
运行结果为
可以看到,我们通过一个外部指针,在 Input() 函数内部将指针指向变量的地址,成功的调用了在其他文件的函数内部声明的数组/变量。
事实上,在这里面,
static关键字起到了至关重要的作用。我们尝试将nums[]数组改成普通的自动(auto)变量,看看运行结果:
运行结果为
可以看到,循环打印出来的是一片混乱的数值,这意味着指针向内存的数值已经被销毁了
阅读原文
http://click.aliyun.com/m/35978/
相关文章推荐
- C语言如何跨文件调用函数定义中声明的变量
- C语言及程序设计提高例程-8 函数的声明、定义和调用
- C语言,函数的声明,定义,以及调用(实现).举例应用.学了这么长时间,初步明白,汗颜啊
- C语言中变量和函数的声明与定义
- 多个".h"文件中声明及定义 全局变量和函数
- 多个".h"文件中声明及定义 全局变量和函数
- 解决多重定义问题/如何声明全局变量让多个cpp文件使用
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- C语言提高-第8讲: 函数的声明、定义和调用(歌手大奖赛计分函数版)
- C语言:返回指针的函数,函数声明、定义和调用,嵌套调用
- VC++如何声明定义全局函数与全局变量
- 如何在c语言中源文件调用另一个源文件的函数
- Python的列表等变量的声明必须要在函数定义与函数调用之前
- C语言中变量和函数的声明与定义
- C语言学习笔记:13_变量和函数的声明与定义
- 函数声明放在头文件中,函数的定义放在实现文件中,然后在主函数中调用
- 如果已经在一个类中定义了全局函数,在其它类文件中如何调用它?
- 第4周 C语言及程序设计提高例程-8 函数的声明、定义和调用
- 多个".h"文件中声明及定义 全局变量和函数
- C语言多文件编译时,编译器不检测其声明的变量类型与定义时的类型是否匹配