关于C语言中局部变量、外部变量、静态变量的理解

    C语言中离不开变量。

    自然会想到变量有哪些:

        1)局部变量:分配在堆栈区域。

                用的最多,只有在所定义的函数内可以使用。

        2)寄存器变量:变量分配在cup的通用寄存器里(用的较少)。

        3)外部变量:分配在静态数据存储区域。

                也称全局变量,定义在所有的函数体的外部。

                在其他文件(非定义全局变量的文件)里可用extern 引用全局变量。

        4)静态变量:分配在静态数据存储区

                静态局部变量:全局寿命,只在其定义的函数局部可见。

                静态全局变量:全局寿命,只在其所定义的文件里能用。


注意:

    1)局部变量对外部变量、静态变量具有屏蔽作用,即当同时局部变量与其他变量都存在时,局部变量优先级最高。

    2)静态全局变量与全局变量(外部变量)最大的区别是:静态全局变量只能在其所定义的文件是可用的,其他文件不能引用。

    3)外部变量,静态全局变量一般在.c文件(因在.h中,直接会引入头文件)。

========================================================

注意:头文件的引用部分

实例

    全局变量引用

externdef.c

//定义一个全局变量
char caExtern[256];
extern.c
/*
 * extern.c
 *
 *  Created on: 2013-10-21
 *      Author: Administrator
 */

#include <stdio.h>
#include <string.h>

extern char caExtern[256];
int main()
{

	memset(caExtern, 0, sizeof(caExtern));
	strcpy(caExtern, "引用外部变量测试");
	fprintf(stderr,"%s\n",caExtern);

	return 0;
}
编译与测试结果:

localhost.localdomain@/home/term/mengfh/checkfun/variable>>cc -c externdef.c 
localhost.localdomain@/home/term/mengfh/checkfun/variable>>cc extern.c externdef.o
localhost.localdomain@/home/term/mengfh/checkfun/variable>>./a.out 
引用外部变量测试
localhost.localdomain@/home/term/mengfh/checkfun/variable>>

---------------------------------------------------------------------------------------

实例:

    静态全局变量

staticdef.c

static char  caStatic[256];
static.c
/*
 * static.c
 *
 *  Created on: 2013-10-21
 *      Author: Administrator
 */
#include <stdio.h>
#include <string.h>

extern char caStatic[256];
int main()
{

	memset(caStatic, 0, sizeof(caStatic));
	strcpy(caStatic, "引用静态外部变量测试");
	fprintf(stderr,"%s\n",caStatic);

	return 0;
}
编译与结果:

localhost.localdomain@/home/term/mengfh/checkfun/variable>>cc  static.c  staticdef.o
/tmp/ccOUYg3R.o: In function `main':
static.c:(.text+0x12): undefined reference to `caStatic'
static.c:(.text+0x31): undefined reference to `caStatic'
static.c:(.text+0x3b): undefined reference to `caStatic'
static.c:(.text+0x45): undefined reference to `caStatic'
static.c:(.text+0x4f): undefined reference to `caStatic'
/tmp/ccOUYg3R.o:static.c:(.text+0x59): more undefined references to `caStatic' follow
collect2: ld returned 1 exit status
localhost.localdomain@/home/term/mengfh/checkfun/variable>>




转载于:https://my.oschina.net/3pgp/blog/170206

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值