C语言基础知识——数据

提示:本文是对C语言基础知识数据部分的回顾总结。

数据知识点目录

  • 基本概念
  • 基本数据类型
    • 整型
    • 浮点型
    • 指针
    • typedef
  • 作用域与存储类型
    • 作用域
    • 链接属性
    • 存储类型


基本概念

标识符(identifier) : 就是变量、函数、类型等的名字,它们由大小写字母、数字和下划线组成,但不能以数字开头。
C是一种大小写敏感的语言。

关键字 :是作为C语言的词汇被保留的,不能用作标识符使用。
根据C11标准一共有 ISO C关键字44

变量(variable) :数据在程序运行期间可能会改变或被赋值。
常量(constant) :数据在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化。
字面值常量 :简称为 字面值 ,是指只能用它的值来称呼它的常量,如3.14、5等数值,-2从技术上说不是字面值常量,而是常量表达式。

常量可以用“const”关键字来声明。
const关键字与指针变量:

int *pi;		
/*pi是一个普通的指向整型的指针*/
int const *pic;		
/*pci是一个指向 “整型常量” 的指针*/
int * const cpi;
/*cpi是一个指向整型的 “常量指针” */
int const * const cpci; 
/*cpci是一个指向 “整型常量” 的 “常量指针”*/

#define”指令是另一种创建名字常量的机制。
只要允许使用字面值常量的地方都可以使用宏定义#define,但是const常量只能用于允许使用变量的地方


基本数据类型

在C语言中,仅有4种基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等)。


整型

整型包括4种:字符(char)、短整型(short)、整型(int)、长整型(long),都可以分为有符号(signed)无符号(unsigned)两种版本。

整型值相互之间大小规则:
长整型至少应该和整型一样长,而整型至少应该和短整型一样长。

/*ANSI标准说明了各个整型值的最小范围:*/
char			---		0~127
signed char		---		-127~127
unsigned char	---		0~255
short int		---		-32767~32767
unsigned short int	---	0~65536
int				---		-32767~32767
unsigned int	---		0~65536
long int		---		
unsigned long int	---

头文件 limits.h 说明了各种不同整数类型的特点。

枚举类型 :就是指它的值为符号常量而不是字面值的类型。

/*声明一个Color_Type的枚举类型*/
enum Color_Type { RED, BLUE, ORANGE = 6, PINK = 7, BLACK = 34, YELLOW };
/*定义该枚举类型的变量*/
enum Color_Type car_color, apple_color, sky_color;	//间接定义

enum { REd, PINK, BLUE }
	car_color, apple_color, sky_color;		//直接定义枚举类型的变量只用一个声明

浮点型

浮点数据类型 :通常以一个小数以及一个以某个假定数为基数的指数组成。

浮点数家族包括 单精度(float)、双精度(double) 扩展精度(long double) 类型。

ANSI标准仅仅规定了 long double 至少和 double 一样长,而 double 至少和 folat 一样长。
ANSI标准同时规定了一个最小范围:所有浮点类型至少能够容纳从 10-37 到1037

头文件 float.h 定义了各个浮点类型的特性。

浮点数字面值在 缺省的情况 下都是 double 类型的,
除非后面加上 L 或 l 表示它是一个 long double 类型的值,
或者后面加上 F 或 f 表示它是一个 float 类型的值。


指针

指针常量 :指计算机的内存位置,将其表达为数值字面值的形式几乎没有用处,除了 NULL指针,它可以用零值来表示。

字符串常量 :字符串就是一串以 NUL 字符结尾的零个或多个字符,字符串通常存储在数组中,因此C语言中没有显式的字符串类型。

程序使用字符串常量的时候会生成一个指向字符的常量指针

string的值其实是“Hello world!”字符串的首地址,而不是字符串本身
char string[] = "Hello world!";
char *ptr = "Hello wold!";

typedef

可以为各种数据类型定义新的名字。

typedef char *ptr_to_char;
/*此声明把标识符ptr_to_char作为指向字符的指针类型的新名字*/
ptr_to_char a;
/*声明a是一个指向字符类型的指针*/

创建新的类型名应该使用 typedef 而不是 #define,因为后者无法正确的处理指针类型。


作用域与存储类型

作用域

当变量在程序的某个部分被声明时,它只有在程序的一定区域才能被访问,这个区域由标识符的作用域(scop) 决定。

编译器可以确认4种不同类型的作用域:文件作用域、函数作用域、代码块作用域、原型作用域。

代码块作用域
位于一对花括号{ }之间的所有语句称为一个 代码块 。任何在代码块的开始位置声明的标识符都具有 代码块作用域(block scop) ,表示它们可以被这个代码块中的所有语句访问。

文件作用域
任何在所有代码块之外声明的标识符都具有 文件作用域(file scop) ,它表示这些标识符从它们的声明之处直到它所在的源文件结尾处都是可以访问的。

原型作用域
原型作用域(prototype)只适用于在函数原型中声明的参数名。用于防止这些参数名与程序其他部分的名字冲突。

int func(int a);			//函数func的声明
此声明int a就是具有原型作用域

函数作用域
函数作用域(function scop)只适用于语句标签,语句标签用于goto语句(尽量不用)。


链接属性

标识符的链接属性(linkage) 决定了如何处理在不同文件中出现的标识符。标识符的作用域与它的链接属性有关。

链接属性一共有3种——external(外部)、 internal(内部)、 none(无)。

属于 internal 链接属性的标识符,只在声明了的同一个源文件中指向一个实体。
属于 external 链接属性的标识符,不论声明多少次,位于几个源文件都表示同一个实体。

用于修改链接属性的关键字:
extern
static (只对缺省链接属性为external的声明才有改变链接属性的效果)


存储类型

变量的 存储类型(storage class) 是指储存变量值的内存类型,它决定了变量何时创建、何时销毁以及它的值将保存多久。

有三个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。

静态(static)变量 :凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是 不属于堆栈 的内存,这类变量被称为静态变量,它无法被指定为其他的存储类型。
静态变量在程序运行之前创建,在程序的整个执行期间始终存在。

自动(auto)变量 :在代码块内部声明的变量的缺省存储类型是 自动的(automatic) ,也就是说它 存储于堆栈 中,称为自动变量。
只用在程序执行到声明自动变量的代码块的时候,自动变量才被创建,当程序的执行流离开该代码块的时候,这些自动变量便自行销毁。(自动变量在代码执行完毕后就自动消失了)

寄存器(register)变量 :用 register 关键字声明自动变量,提示它们应该存储于 机器的硬件寄存器 而不是内存中。
通常寄存器变量比存储于内存的变量访问起来效率更高。


你可能感兴趣的:(编程语言,c语言)