浮点类型
float类型 double类型
EG:#include<stdio.h>
#include<float.h>
int main(void)
{
float f;
double d;
long double ld;
printf(“sizeof(float):%d\n”,sizeof(f));
printf(“sizeof(double):%d\n”,sizeof(d));
printf(“sizeof(long double):%d\n”,sizeof(ld));
printf(“FLT_MAX:%lf\n”,FLT_MAX);
printf(“DBL_MAX:%lf\n”,DBL_MAX);
// printf(“LDBL_MAX:%lf\n”,LDBL_MAX);
return 0;
}
精度丢失
1、浮点类型本身精度不够
2、类型转换丢失(浮点类型<—>整型)
运算表达式的属性由操作数决定,编译器会将表达式的属性向尽量广的范围转换
对于printf();里面的输出格式控制支持位数控制,
float xx=123123.456789
float yy=123123.443442
printf(“xx:%.3\n”,xx);
//%[+-]总长度.小数位 格式,+表示对齐方式(默认) 右对齐,-表示左对齐
//%02d:%02d 输出两位,不够补零
指针
指针常量
字符串常量 char* 表示我们的字符串常量在存放首地址
指针(指针变量)存放一个内存地址
地址 8位16进制数表示一个地址(32-bit)
0xbf 88 8888 一个字节的数据 0xff
int a;
char b;
//n内存需要申请才是合法的,如果直接复制为地址则是非法的,会报段错误
int *p=&a; //取的是首地址
char *str;
*str 是一个字符
int* a,b,c; 实际上只有a是指针,之后的b,c都是整型
typedef 为各类型定义新的名字
eg:
typedef char* ptr_to_char;
ptr_to_char a,b,c; //则所有的a,b,c都是指针
常量:在程序执行中值保持不变的量
两种形式:名字常量,const常量:把变量的格式变为只读格式,
const 修饰的永远都是其后面的东西,
#define 3.141592654
int const a=15; //a=100;错误,所以一般定义的时候都要赋值
int const *pci=&a;
int *const cpi=&a;
int const * const cpci; 指向和指向的值都不能改
指针常量:指针是一个常量,指针不能指向其它地方,指向的值可以变–> int * const p
常量指针:指向常量的指针,指针可以变,指向的值不能变。–>int const *pci;
eg:
#include<stdio.h>
int main(void)
{
int const a=200;
//a=100;
//强制修改
int *pa = &a;//借助指针修改
*pa = 100;
printf(“a:%d\n”,a);
int i=100;
int j;
int const *p1 = &i;
p1 = &j;
// *p1 = 200;
int *const p2 = &i;
// p2 = &j;
*p2 = 200;
return 0;
}
标识符的三大属性:作用域,链接属性,存储类型
作用域 scope
链接属性 linkage
存储类型 storage
重定义:在同一作用域内有2个同名的标识符被定义
作用域:编译器决定我这个变量的有效范围,具有覆盖性
文件作用域
函数作用域
代码块作用域
原型作用域原型作用域和函数作用域冲突
#include<stdio.h>
int a; //文件作用域
void fun(int x) //原型作用域
{
int x;//函数作用域 //冲突error
}
int main(void)
{
int a;//函数作用域
{
int a; //代码块作用域
}
return 0;
}
链接属性:与作用域不冲突,链接属性决定着在不同文件(源文件)中是不是同一个实体
external 默认,在不同文件可以是同一个实体
internal 需要使用static关键字+external,在不同文件是不同实体,
none 默认,没有链接属性的标识符,,被当作单独的个体
在函数外部定义的变量(全局变量),链接属性为external
全局变量默认初始值为0
在函数内部定义的变量(局部变量),链接属性为none
static 关键字
当修饰external 的变量时,将其转变为internal的链接属性
当在头文件中声明;int global=100;但是在各文件中包含时,编译时会出错,因为其进行了多次初始化。
加上 static int global=100就可以多次初始化,
external 关键字
把none → external
存储类型
普通内存,运行时栈,硬件寄存器
静态变量,自动变量(局部变量),寄存器变量