iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言简明讲解变量的属性
  • 748
分享到

C语言简明讲解变量的属性

2024-04-02 19:04:59 748人浏览 薄情痞子
摘要

目录一、C语言中的变量属性二、auto 关键字三、reGISter 关键字四、static 关键字五、extern 关键字六、小结一、C语言中的变量属性 C语言中的变量可以有自己的属

一、C语言中的变量属性

  • C语言中的变量可以有自己的属性
  • 在定义变量的时候可以加上“属性”关键字
  • "属性”关键字指明变量的特有意义

语法:

property type var_name;

示例:

int main()
{
    auto char i;
    register int j;
    static long k;
    extern double m;
 
    return 0;
}

二、auto 关键字

  • auto 即C语言中局部变量的默认属性
  • auto 表明将被修饰的变量存储于栈上
  • 编译器默认所有的局部变量都是 auto 的

示例:

void f()
{
    int i; //局部变量默认属性为 auto
    
    auto int j; //显示申明 auto 属性
}

三、register 关键字

  • register 关键字指明将局部变量存储于寄存器中
  • register 只是请求寄存器变量,但不一定请求成功
  • register 变量的必须是CPU寄存器可以接受的值
  • 不能用 & 运算符获取 register 变量的地址
#include<stdio.h>
 
register int g_v;    //eror
 
int main()
{
    register char var;
    
    printf("0x%08X",&var);    //error
 
    return 0;
}

四、static 关键字

static 关键字指明变量的“静态”属性

  • static 修饰的局部变量存储在程序静态区

static关键字同时具有“作用域限定符”的意义

  • static 修饰的全局变量作用域只是声明的文件中
  • static 修饰的函数作用域只是声明的文件中
#include<stdio.h>
 
int g_v; //全局变量,程序的任意地方均能访问
 
static int g_vs;    //静态全局变量,只在当前文件中可访问
 
int main()
{
    int var;    //局部变量,在栈上分配空间
    
    static int svar;    //静态局域变量,在静态数据区分配空间
    
    return 0;
}

下面看一段auto,register,static对比分析代码:

#include <stdio.h>
 
int f1()
{
    int r = 0;
    
    r++;
    
    return r;
}
 
int f2()
{
    static int r = 0;
    
    r++;
    
    return r;
}
 
 
int main()
{
    auto int i = 0;       // 显示声明 auto 属性,i 为栈变量
    static int k = 0;     // 局部变量 k 的存储区位于静态区,作用域位于 main 中
    register int j = 0;   // 向编译器申请将 j 存储于寄存器中
 
    printf("%p\n", &i);
    printf("%p\n", &k);
    //printf("%p\n", &j);   // error
    
    for(i=0; i<5; i++)
    {
        printf("%d\n", f1());
    }
    
    for(i=0; i<5; i++)
    {
        printf("%d\n", f2());
    }
    
    return 0;
}

下面为输出结果:

如果试图获取 register 变量 j 的地址,就会报如下错误:

另外,可以看到 i 和 k 的内存地址相隔很远,这是由于这两个变量一个在栈上,一个在静态区

五、extern 关键字

extern 用于声明“外部”定义的变量和函数

  • extern 变量在文件的其它地方分配空间
  • extern函数在文件的其它地方定义

extern 用于“告诉”编译器用C方式编译

c++ 编译器和一些变种C编译器默认会按“自己”的方式编译函数和变量,通过 extern 关键可以命令编译器“以标准C方式进行编译”,如:

下面看一段 static 和 extern 的使用代码:

g.c

static int g_i;
 
int getI()
{
    return g_i;
}

test.c

#include <stdio.h>
 
extern int getI();
 
int main()
{
    printf("%d\n", getI());
       
    return 0;
}

下面为输出结果:

注意如果想要直接在 test.c 文件里获得 g_i 的值是不行的,因为static 修饰的全局变量作用域只是声明的文件中

六、小结

  • auto 变量存储在程序的栈中,默认属性
  • static 变量存储在程序静态区中
  • register 变量请求存储于CPU寄存器中
  • extern 变量在文件的其它地方分配空间
  • extern 能够指示编译器按照标准C方式编译程序

到此这篇关于C语言简明讲解变量的属性的文章就介绍到这了,更多相关C语言变量的属性内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言简明讲解变量的属性

本文链接: https://www.lsjlt.com/news/146620.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言简明讲解变量的属性
    目录一、C语言中的变量属性二、auto 关键字三、register 关键字四、static 关键字五、extern 关键字六、小结一、C语言中的变量属性 C语言中的变量可以有自己的属...
    99+
    2022-11-13
  • C语言简明清晰讲解枚举
    目录概述简单使用入门判断自定义数值一种不严格的写法概述 一个类型,值只能是一堆值中的一个。 比如星期几,只会是星期一到星期天。 用数值表示的话就是0到6,但是0到6不太好理解。 而枚...
    99+
    2022-11-13
  • C语言简明清晰讲解结构体
    目录本质简单使用一些写法我套我自己内存对齐举例-int char char举例-char int char举例-char char int由结构体指针访问成员本质 一些值的集合。 简...
    99+
    2022-11-13
  • C语言简明讲解预编译的使用
    目录小复习1、内置符号2、自定义符号3、自定义宏4、条件编译小复习 预处理,预编译是编译的第一步。 会有三件基本的事情发生: 引入#include去除注释修改#define 1、内置...
    99+
    2022-11-13
  • C语言简明讲解队列的实现方法
    目录前言队列的表示和实现队列的概念及结构代码实现束语前言 大家好啊,我又双叒叕来水博客了,道路是曲折的,前途是光明的,事物是呈螺旋式上升的,事物最终的发展结果还是我们多多少少能够决定...
    99+
    2022-11-13
  • C语言简明讲解快速排序的应用
    目录快速排序1.1快速排序引入1.2快速排序的基本思想1.3快速排序的排序流程1.4实例说明1.5代码实现1.6性能分析快速排序 快速排序,说白了就是给基准数据找其正确索引位置的过程...
    99+
    2022-11-13
  • C语言简明讲解归并排序的应用
    目录一.归并排序1.1归并排序引入1.2归并排序的概念1.3归并排序的原理1.4实例说明1.5具体步骤说明1.6代码实现1.7性能分析一.归并排序 1.1归并排序引入 对于堆排序来说...
    99+
    2022-11-13
  • C语言简明讲解操作符++和--的使用方法
    目录一、++与--操作符的本质二、++与-- 操作符使用分析三、小结一、++与--操作符的本质 ++ 和 -- 操作符对应两条汇编指令 前置 变量自增(减)1取变量值 后置 取变量值...
    99+
    2022-11-13
  • C语言简明讲解单引号与双引号的使用
    目录一、单引号和双引号二、小贴士三、程序实例分析1四、程序实例分析2五、容易混淆的代码六、小结一、单引号和双引号 C语言中的单引号用来表示字符字面量C语言中的双引号用来表示字符串字面...
    99+
    2022-11-13
  • C语言简明讲解类型转换的使用与作用
    目录一、类型之间的转换二、强制类型转换三、隐式类型转换四、表达式中的隐式类型转换五、小结一、类型之间的转换 C语言中的数据类型可以进行转换 强制类型转换隐式类型转换 二、强制类型转...
    99+
    2022-11-13
  • C语言简明讲解三目运算符和逗号表达式的使用
    目录一、三目运算符二、逗号表达式三、小结一、三目运算符 三目运算符( a b : c)可以作为逻辑运算的载体 规则:当 a 的值为真时,返回 b 的值;否则返回 c 的值 下面看一...
    99+
    2022-11-13
  • C语言中bool变量的深入理解
    目录前言bool类型变量的大小bool 值与0比较c语言中bool如何输出总结前言 在一些高级语言当中,为了能够完成更好的逻辑判断,因此就有了bool类型,bool类型的变量值只有t...
    99+
    2022-11-12
  • 重学Go语言之变量与常量的声明与使用详解
    目录变量变量名声明变量作用域常量iota 常量生成器小结变量 什么是变量?变量是一块可以随时存放数据的内存区域。在我们申请这块内存区域(声明变量)时,需要指定变量名以及变量的数据类型...
    99+
    2023-03-02
    Go语言变量 常量 Go语言变量 Go语言 常量
  • C语言由浅入深了解变量的应用
    目录1. 变量的存储类别内存虚拟内存分区(运行程序时进行分区) 2. 全局变量普通的全局变量静态全局变量3. 局部变量普通局部变量静态局部变量4. const不可赋值变量5...
    99+
    2022-11-13
  • 适合初学者的C语言常量类型的讲解
    目录常量的定义常量的分类字面常量const修饰的常变量#define 定义的标识符常量枚举常量生活中有一些是可变的量(比如你的年龄,身高,体重,对象) 还有一些不变的量(比如圆周率,...
    99+
    2022-11-13
  • C语言示例讲解结构体的声明与初始化方法
    目录一、结构体声明的结构1.直接声明2.使用typedef声明一个新的类型3.不完全声明二.结构体初始化1.声明(同时定义)时直接赋值2.定义时直接赋值3.定义后赋值4.指定初始化一...
    99+
    2022-11-13
  • C语言的变量类型及内存大小详解
    类型 存储大小 值范围 c输入输出格式 ...
    99+
    2022-11-12
  • Go语言基础变量的声明及初始化示例详解
    目录一、概述二、声明变量三、编译器推导类型的格式【一定要赋值】四、短变量声明并初始化五、匿名变量——没有名字的变量六、注意七、案例一、概述 变量的功能是存储用户的数据 二、声明变量 ...
    99+
    2022-11-12
  • C语言的各类变量和零值的比较详解
    目录1.波尔变量和零值比较2.整形变量和零进行比较3.浮点变量和零值比较4.指针和零值比较总结 1.波尔变量和零值比较 在C语言中本来是不存在bool类型的,但在C99标准中加入了b...
    99+
    2022-11-12
  • C语言:变量的作用域和生命周期详解
    目录1.全局变量和局部变量2.变量的作用域2-1.声明外部变量的方法3.变量的生命周期4. 局部变量&自动变量总结1.全局变量和局部变量 定义在代码块外部的是全局变量 定义在...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作