基本内置类型 声明与定义 static与entern const auto register volatile
基本内置类型:
1.整型:分为带符号整型和无符号整型两种。
2.实型:分为3种::单精度型(4个字节)、双精度型(8Byte)、长双精度型
3. 构造类型:定义:由若干个相关的数据组合在一起形成的一种复杂数据类型,构造数据类型的成分数据可以是基本数据类型的,也可以是别的构造类型的。数组类型,结构类型,共用类型。
4.指针类型:取程序对象(如变量)在内存中占据的地址为值的一种特殊的数据类型。
5.枚举类型:当变量只取很少几种可能的值,并使用标识符对值命名时,这种变量的数据类型,可用枚举类型来表示。
6.void类型:可以表示没有数据(没有结果,没有形式参数),也可以表示某种任意类型的数据。void表示空类型,void*表示任意数据的指针类型,程序如要使用void类型的数据,应该将它强制的转换成某种具体的指针类型。
二.数据类型极其字节数
类型说明符 |
字节数 |
int |
2或4 |
unsigned int |
2或4 |
short int |
2 |
unsigned short int |
2 |
long int |
4 |
unsigned long |
4 |
char |
1 |
unsigned char |
1 |
三.有符号数:最高位为1,表示这个数为负数,其值为除最高位以外的剩余位的值添上“-”号;如果最高位是0,表明这个数是正数,其数为除最高位以外的剩余位的值。
补码:正数补码=原码,负数补码=除符号位各位取反整体+1
声明与定义
定义:创建一个对象,并为这个对象分配一块内存命名(一个变量或对象在一定的区域内只能被定义一次)
声明:两重含义
一、 告诉编译器某个名字已经匹配到一块内存上了。声明可以多次出现
二、告诉编译器某个名字已经被占用了,其他的地方不能再用这个名字来作为变量名或对象名
static
简单来说static修饰变量,就是指该变量空间独立于函数中的auto变量或者栈变量,static变量空间在内存中的静态区分配。
1.修饰局部变量
在用static修饰局部变量后,该变量值在初次运行时进行初始化工作,且只进行一次。
#include<stdio.h>
void fun()
{
static int a=1;a++;
printf("%d\n",a);
}
int main(void)
{
fun();
fun();
return 0;
} 程序执行的结果为 2 3
说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.
对于静态局部变量如果没有进行初始化的话,对于整型变量系统会自动对其赋值为0,对于字符数组,会自动赋值为“\0”
2.修饰全局变量
对于一个全局变量,它既可以在本源文件中被访问,也可以在同一个工程的其他源文件中被访问(extern进行声明即可)
(1)file1.c
int a=1;
(2)file2.c
#include<stdio.h>
extern int a;
int main(void)
{
printf("%d\",a)
return 0;
} 执行结果为 1
但是如果在file1.c中吧“int a=1”改为“static int a=1”,那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。
3.修饰函数
用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。
extern
extern可以修饰变量和函数,表示该变量或者函数在其他地方被定义,在这里声明使用它,这样多个源文件共享变量和函数。
1.extern变量名
在任何函数体外声明或定义变量时,不加extern可能是定义也可能是声明,编译器选择初始化的那个(最多一个地方对它进行丁初始化),如果没有初始化则任选其中一个作为定义,其他为声明,但是加extern肯定是声明如果不想让其他源文件链接到,则需要使用static
关键字。
在函数体内声明(注意是声明,在函数体内部不能定义外部变量)使用其他源文件中定义的变量时,必须使用extern关键字,因为在函数体内默认为局部变量。
2.extern函数
函数默认是外部的(在函数体内或函数体外声明一个外部函数,extern关键字均可省略),如果不想让其他源文件链接到,在函数前加static关键字。
前面提到过,编译器并不检查多个源文件共享的变量的类型是否一致,那么下面的代码是合法的。
char a[]="hello";
int mian()
{
extern int a;
printf("%x\n",a)
return 0;
}
同样,多个源文件共享函数,编译器也不会对外部函数的参数类型、参数个数和返回值类型进行检查,只要函数名相同即可。
int echo (int x)
{
return x;
}
int main()
{
extern int echo(char);
printf("%d\n",echo(255));
rentrn 0;
}
const
const是constant的简写,表示海枯石烂,恒定不变,一旦相伴,永不变"心"。只要一个变量前面用const来修辞,就意味着该变量里的数据可以被访问,不能被修改。我们其实还可以给它起个更雅的名字——readonly.
【可以将类型去掉看const修饰谁,谁的值就不能改编】
例如:
const int a=10;去掉类型int变成“const a=10”,a的值不变。
补充知识点:三者区别
auto
auto关键字在我们写的代码里几乎看不到,但又是无处不在的。在c代码中会出现大量的函数模块,每个模块都有其生命周期,在函数生命周期中声明的变量通常叫做局部变量,也叫做自动变量。
例如:
int fun()
{
int a=10; //auto int a=10;
//do something
return 0;
}
整型变量a在fun函数内声明,其作用域为fun函数内,出来fun函数,不能被引用,a变量为自动变量°也就是说编译器会在"int a=10"之前会加上auto的关键字。auto的出现
意味着当前变量的作用域为当前函数或代码段的局部变量,意味着当前变量会在内存栈上进行分配。
栈:先进后出的数据结构
register
使该变量作为一个寄存器变量,让该变量访问速度达到最快。
寄存器,缓存:速度最快,容量小,体积大,价格高
内存:速度较快,容量大,体积小,价格较低
使用寄存器变量时,注意
1.待声明为寄存器变量类型应该是CPU寄存器所能接收的类型,意味着寄存器变量是单个变量,变量长度应该小于等于寄存器长度。
2.不能对寄存器变量使用取地址符“&”,因为该变量没有内存地址。
3.尽量在大量频繁操作时使用寄存器变量,且声明的变量个数应该尽量少。
volatile
变量声明为volatile,不管值有没有变化,每次对其值访问时,都会从内存里,寄存器里读取,从而保证数据的一致。
基本内置类型 声明与定义 static与entern const auto register volatile相关推荐
- python内置类型和类_python – 内置类型和用户定义之间的不一致
区别在于内置输入是C编译的代码描述符,而用户定义的函数代表它的代码 descriptors.有关详细信息,请参阅 source. 此外,虽然内置函数及其方法是静态分配的数据结构,但用户定义的数据结构的 ...
- 《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr
C++ Primer第二章的内容主要介绍了变量和基础类型,包括C++语言定义的基础内置类型.变量的定义及声明.符合类型如指针及引用的介绍和const及常量表达式constexpr的介绍,本次博客也从这 ...
- C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间...
转 自:http://www.cnblogs.com/rocketfan/archive/2009/10/02/1577361.html 1. 编译单元:一个.cc或.cpp文件作为一个编译单元,生成 ...
- 内存四域,变量声明和定义,寄存器,c内嵌汇编,auto,堆栈,常量,静态变量
1.内存四大区域 2.在程序中,变量的声明可以有多份,定义只能有一份 3.寄存器在cpu里面,没有地址 4.c语言内嵌汇编语言 5.auto变量 自动分配内存,自动释放内存. 6.栈的大小由编译 ...
- 内联函数的声明和定义
一.什么叫inline函数? inline(小心,不是online),翻译成"内联"或"内嵌".意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函 ...
- C++ static、const对象声明与定义
// //fileName:TestClass.h #pragma once class TestClass { public: TestClass(); TestClass(int n); virt ...
- Dart基础学习02--变量及内置类型
Dart基础学习02--变量及内置类型 Dart中的变量 首先看一个变量的定义和赋值 var name = 'Bob'; 在Dart中变量名都是引用,这里的name就是一个指向值为Bob的字符串的引用 ...
- 《C++primer》第二章--变量和基本内置类型
基本内置类型 如何选择类型的几点建议 当明确知晓数值不能为负数时,选用无符号类型 使用int进行整数运算.因为short一般表示的范围比较小,而long一般和int有相同的范围.如果表示的范围超过了i ...
- 变量声明和定义的区别
转自:http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候 ...
- 在c语言中函数的定义变量的值为,变量定义(C语言中变量的声明和定义)
变量定义(C语言中变量的声明和定义),哪吒游戏网给大家带来详细的变量定义(C语言中变量的声明和定义)介绍,大家可以阅读一下,希望这篇变量定义(C语言中变量的声明和定义)可以给你带来参考价值. 3.函数 ...
最新文章
- 600分钟搞定Python入门到实战
- Android5.1.1 - zygote中获取系统服务时抛出异常
- ECMA262 Edition5 Object,Object的属性和方法,Object.prototype的方法.
- VC ActiveX 控件 开发总结
- el-table中怎样设置标题栏颜色以及每一行颜色交替不同的效果
- sand.A java_java中volatile关键字的含义(转)
- 典型PC系统各操作指令执行时间
- el-date-picker设置默认日期_程序员必备:Java 日期处理的十个坑
- 面试被拒绝如何争取_争取反馈
- 为什么学习Markdown
- 开发QQ桌球瞄准器(2):创建项目添加主窗体
- 数字化转型,金融行业的下一个引爆点
- 【黄冈市中级人民法院在湖北行星传动设备有限公司的强制清算案件中的违法问题给投资者的启示】
- 前端关于Base64编码的一些技术分析
- php 怎么验证邮箱验证码,PHP实现邮箱验证码验证功能
- Javascript 实现一个分钟秒钟倒计时器
- Python项目实战:数据可视化与股票数据分析-关东升-专题视频课程
- 2020年腾讯,阿里,美团等Android高频面试题及答案,2021Android者未来的出路在哪里
- spring源码分析06-spring配置类解析
- python八枚硬币问题