Linux C 学习笔记 三

浮点类型

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* 表示我们的字符串常量在存放首地址

 

指针(指针变量)存放一个内存地址

地址 816进制数表示一个地址(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

存储类型

普通内存,运行时栈,硬件寄存器

静态变量,自动变量(局部变量),寄存器变量