初识C语言4

11.0关键字register(寄存器)

计算机上,数据都可以存储在哪里呢?

  • 寄存器    字节

  • 高速缓存xx M

  • 内存  8G/16G

  • 硬盘      500G

  • 网盘          2T

越往上速度越快,造假越高,空间越小

CPU中央处理器

register int a=10建议编译器把a的值存在寄存器里

11.1关键字typedef

类型定义,可以理解为类型重命名

例:typedef unsigned int uint;可以把复杂的命名简单化

11.2关键字static(静态的)

三种用法:修饰局部变量

修饰全局变量

修饰函数

11.2.1修饰局部变量

内存:栈区:局部变量、函数参数、临时的变量(进入作用域创建,出了作用域就释放)

堆区:动态内存分配、malloc、callocc、realloc、free

静态区:静态变量、全局变量(放在静态区的数据创建后直到程序结束才释放)

int a=0/static a=0

#include<stdio.h>

void test()

{  

  int i = 0;   

  i++;  

  printf("%d ", i);

}

int main()

{

   int i = 0;   

   for(i=0; i<10; i++)

   {      

   test();  

   }  

  return 0;

}

#include<stdio.h>

void test()

{   

    //static修饰局部变量    

   static int i = 0;   

   i++;    

   printf("%d ", i);

}

int main()

{

   int i = 0;   

   for(i=0; i<10; i++)  

   {       

   test();  

   }    

   return 0;

}

普通的局部变量是放在栈区上的,这种局部变量进入作用域创建,出了作用域释放

但是局部变量被static修饰后,这种变量就放在静态区,放在静态区的变量,创建好后,直到程序结束才释放。

本质上:static的修饰改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样

被static修饰不影响作用域的!!!但是生命周期发生了变化,变长了。

11.2.2修饰全局变量

extrn//声明外部符号

全局变量本身是具有外部连接属性的,在A文件中定义的变量,在B文件中可以通过【链接】使用

但是如果全局变量被static修饰,这个外部链接属性就变成了内部连接属性,这个全局变量只能在自己所在的源文件内部使用

static的修饰,会把外部连接属性变成内部连接属性,最终使得全局变量的作用域变小了(即使有extern的声明也不行)

11.2.3修饰函数

函数本身是具有外部连接属性的,被static修饰后,外部链接属性就变成了内部连接属性,使得这个函数只能在自己所在的源文件内部使用,其他源文件无法使用。

限制了作用域

12.#define定义常量和宏

#define M 100

#define MAX(x,y)(x>y?x:y)

MAX宏的名字、(x,y)宏的参数、(x>y?x:y)宏体

13.指针

首先要理解内存

内存是计算机上的存储空间,8G/16G,程序运行的时候会载入内存,  程序中如果有数据需要存储,也会申请内存空间

如何有效使用内存:

在一个大厦中,一个门牌号(地址

)对应一个房间

内存单元的编号(地址)(地址也叫指针)

一个内存单元的大小是一个字节

如果访问一个内存单元,那内存单元的地址(指针)如何产生呢?

以32位机器为例:32根地址线,地址线如果通电

00000000000000000000000000000000

0

1字节

00000000000000000000000000000001

1

00000000000000000000000000000010

2

...

3

01111111111111111111111111111111

4

10000000000000000000000000000000

5

.. .

6

11111111111111111111111111111111

...

一共产生2^32个这样的二进制序列,就可以作为2^32个地址,就可以管理2^32个内存单元,也就是2^32个字节的内存空间=4GB

编号=地址=指针

int a=1:      //向内存申请4个字节

&a;           //取地址操作符

                         //&a取出的是a所占内存的4个字节中第一个字节的地址

int * pa=&a;     //pa是一个变量,用来存放地址的,而地址又叫指针,所以C语言中把pa叫指针变量(指针变量是存放指针的变量)

                        //*告诉我们pa是指针,pa指向的是int类型的变量

printf("%p\n",&a); 等价于printf("%p\n",pa);

进制只是数值的表示形式

*pa=20;       //解引用操作,作用就是通过pa中的地址,找到a,*pa就是a

              //a=20

指针:1.指针就是地址 2.口头语中指针一般指的是指针变量

13.2指针变量的大小

一个指针变量的大小是多少?

指针变量是用来存放地址的

32位机器上是32个bit位,指针变量存放的是32bit的地址,指针变量的大小是4个字节

64位机器上是64个bit位,指针变量存放的是64bit的地址,指针变量的大小是8个字节

x86是32位环境,x64是64位环境

14.结构体

C语言的内置类型

    char

    short

    int

    long

    long long

    float

    double

人:姓名,性别,身高,体重,年龄...

书:书名,作者,出版社,定价...

复杂对象很难用一种类型名描述清楚

自定义的类型:

  • 结构体

  • 枚举

  • 联合体

结构体的关键字:struct

定义一个学生类型

struct Stu

{

    char name[20];

    char sex[5];

    int age;

}

int main()

{

    int num=0;

    struct Stu s={"zhangsan","男","20};

    struct Stu s2={"如花","女","18};

    print("%s\n",s2.name); 

    //结构体变量.成员名(访问结构体中的数据)

    return 0;

}

//结构体的指针->成员名

void Print(struct Stu*ps)

{

    printf("%s %s %d\n",(*ps).name,(*ps).sex,(*ps).age);

或者printf("%s %s %d\n",ps->name,ps->sex,ps->age);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值