c语言剖析,C语言深度剖析

基本数据类型分析

auto、register、static

if、switch、do、while、for

goto、void、extern、sizeof

const、volatile

struct、union

enum

typedef

基本数据类型

什么是数据类型?数据类型是创建变量的模具

61b5921d0501

数据类型是创建变量的模具

类型的本质:数据类型可理解为固定内存大小的别名

61b5921d0501

数据类型的本质是固定内存大小的别名

变量本质

变量是一段实际连续存储空间的别名

程序中通过变量来申请并命名存储空间

通过变量的名字可以使用存储空间

61b5921d0501

变量是一段实际连续存储空间的别名

类型和变量的关系

$ vim program.c

#include

int main()

{

char c = 0;

short s = 0;

int i = 0;

printf("\n%d, %d", sizeof(char), sizeof(c));

printf("\n%d, %d", sizeof(short), sizeof(s));

printf("\n%d, %d", sizeof(int), sizeof(i));

return 0;

}

$ gcc program.c -o program

$ program.exe

1, 1

2, 2

4, 4

$ vim program.c

#include

//自定义类型(别名)

typedef int INT32;

typedef unsigned char BYTE;

typedef struct _demo

{

short s;

BYTE b;

INT32 i;

} DEMO;

int main()

{

//创建变量

INT32 i32;

BYTE b;

DEMO d;

//数据类型是变量的模子

printf("%d, %d\n", sizeof(INT32), sizeof(i32));

printf("%d, %d\n", sizeof(BYTE), sizeof(b));

printf("%d, %d\n", sizeof(DEMO), sizeof(d));

return 0;

}

$ gcc program.c -o program

$ program.exe

4, 4

1, 1

8, 8

属性关键字

C语言中的变量可以有自己的属性

在定义变量的时候可以附加“属性”关键字

“属性”关键字指明变量的特有意义

auto、static、register

61b5921d0501

内存分配类型

auto

auto指明变量是在内存的栈上分配空间的

auto是C语言中局部变量的默认属性

编译器默认所有的局部变量都是auto

#include

int g = 0;

int main()

{

auto int i = 0;

static int j = 0;

register int k = 0;

return 0;

}

static

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

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

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

static是文件作用域标识符

static修改的全局变量作用域只在声明的文件

static修改的函数作用域只在声明的文件中

register

register关键字指明将变量存储于寄存器中

register只是请求寄存器变量但不一定成功

register变量必须是CPU寄存器可以接受的值

不能使用&取地址运算符获取register变量的地址

#include

register int m = 0;

int main()

{

auto int i = 0;

static int j = 0;

register int k = 0;

return 0;

}

$ gcc program.c -o program

λ gcc program.c -o program

program.c:3:14: error: register name not specified for 'm'

register int m = 0;

小结

auto变量存储在程序的栈中,默认属性。

static变量存储在程序静态区中

register变量请求存储于CPU寄存器中

#include

int main()

{

auto int i = 0;

static int j = 0;

register int k = 0;

return 0;

}

#include

int main()

{

auto int i = 0;

static int j = 0;

register int k = 0;

printf("%0X\n", &i);

printf("%0X\n", &j);

return 0;

}

$ gcc program.c -o program

$ program.exe

61FF2C

407020

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值