Linux下的C语言学习——第二节数据类型,运算符

终端快捷键

mkdir文件名,可以创建文件夹

cd 文件名,可以跳转到该目录下

cd .. 跳至上级目录  .当前目录  ~用户主目录   -上次目录

Vim * -p该目录下文件一块编辑

Cp  目录1/  目录2 -r 把目录1下的文件拷贝到目录2

touch 文件名 创建文本文件

gcc *.c编译全部.c文件

tab 补全

rmdir 目录/   删除目录

Ls -l查看文件的权限

vim快捷键

yy复制

p粘贴

gt多文件跳转

:wqa多文件全部退出

:n调转下一个页

:N跳转到上一个页

C语言数据类型

类型转换:隐式,默认精度高。Char+int =int

显式

不同形式的0值:0,‘0’,“0”,‘\0’

常量:整型,实型,字符(‘a’'\015'转义字符),字符串(“axv”),标识(#define)

变量:【存储类型】 数据类型  标识符 = 值;

数据类型:基本数据类型/构造数据类型

【存储类型】auto:默认型,自动分配回收

    register 寄存器型,只是建议系统,只能局部变量,32位数据类型

    static:静态型,自动初始化为0或空值,其值有继承性

    extern:说明型,不能改变被说明变量的值和类型

声明周期:

局部变量和静态局部变量对比:局部变量

[tom@CentOS7 ~]$ vim auto.c

-----------------------------------------------

#include <stdio.h>

#include <stdlib.h>



void func(void)

{

    int x = 0;//局部

    x = x + 1;

     printf("%p->%d\n",&x,x);

}



int main()

{

    func();

    func();

    func();

}

------------------------------------------------------

[tom@CentOS7 ~]$ make auto

cc     auto.c   -o auto

[tom@CentOS7 ~]$ ./auto

0x7ffd69a83b7c->1

0x7ffd69a83b7c->1

0x7ffd69a83b7c->1

-------------------------------------------------------

静态局部变量,继承性

#include <stdio.h>

#include <stdlib.h>



void func(void)

{

  static  int x = 0; //静态局部

    x = x + 1;

     printf("%p->%d\n",&x,x);

}



int main()

{

    func();

    func();

    func();

}

------------------------------------------------------

[tom@CentOS7 ~]$ make auto

cc     auto.c   -o auto

[tom@CentOS7 ~]$ ./auto

0x601030->1

0x601030->2

0x601030->3

全局变量Vs局部变量

int i = 100;



func(int i) 

{



    printf("[%s]i=%d\n",__FUNCTION__,i);

}



int main()

{

    printf("[%s]i=%d\n",__FUNCTION__,i);

    int i = 3;

    func (i);

    {

    printf("[%s]i=%d\n",__FUNCTION__,i);

    }

}  

----------------------------------------------------------------

[tom@CentOS7 ~]$ make auto

cc     auto.c   -o auto

[tom@CentOS7 ~]$ ./auto

[main]i=100

[func]i=3

[main]i=3

[main]i=3

static修饰全局变量:方便项目合作时,每个人写的不同模块的全局变量因为重名而冲突,static全局变量只在本模块有效。

例子静态变量

[tom@CentOS7 ~]$ mkdir miniproj

[tom@CentOS7 ~]$ cd miniproj

[tom@CentOS7 miniproj]$ touch main.c proj.c proj.h

[tom@CentOS7 miniproj]$ vim main. proj.c proj.h

Main.c:

#include <stdio.h>

#include <stdlib.h>



#include "proj.h"



static int i = 10;



int main(void)

{

    printf("[%s]i=%d\n",__FUNCTION__,i);

    func();

    exit(0);

}

~                                                                     ~     

Proj.c:

#include <stdio.h>

#include <stdlib.h>



#include "proj.h"



static int i =100;



void func (void)

{

    printf("[%s]:i=%d\n",__FUNCTION__,i);

    exit(0);

}  

~                                                   

                 

~         

Proj.h:

#ifndef PROJ_H___

#define PROJ_H___



void func(void);



#endif                                                                    ~                





[tom@CentOS7 miniproj]$ gcc *.c

[tom@CentOS7 miniproj]$ ./a.out

[main]i=10

[func]:i=100





静态函数不能在头文件声明(因为静态static会限制函数的作用范围),若要调用先写一个主调函数并声明后,主调函数在被调之下。

Main.c:

#include <stdio.h>

#include <stdlib.h>



#include "proj.h"



static int i = 10;



int main(void)

{

    printf("[%s]i=%d\n",__FUNCTION__,i);

   Call_func();

    exit(0);

}

~ 

 

Proj.c:

#include "proj.h"



static int i =100;



static void func (void)

{

    printf("[%s]:i=%d\n",__FUNCTION__,i);

    exit(0);

}



void Call_func(void)

{

        func();

}

Proj.h:

#ifndef PROJ_H___

#define PROJ_H___



void Call_func(void);



#endif





#include <stdio.h>

#include <stdlib.h>



#include "proj.h"



static int i = 10;



int main(void)

{

    printf("[%s]i=%d\n",__FUNCTION__,i);

   Call_func();

    exit(0);

}

~  

Extern 不是变量定义,是可扩展外部变量的作用域,不能改变其类型和值

[tom@CentOS7 ~]$ cp miniproj/ minproj_extern -r

[tom@CentOS7 ~]$ cd minproj_extern/

[tom@CentOS7 minproj_extern]$ vim * -p

还有 4 个文件等待编辑

Main:

#include <stdio.h>

#include <stdlib.h>



#include "proj.h"



int i = 10;



int main(void)

{

    printf("[%s]i=%d\n",__FUNCTION__,i);

    func();

    exit(0);

}

~                                                                    

Proj.c:           

#include <stdio.h>

#include <stdlib.h>



#include "proj.h"



extern int i ;



 void func (void)

{

    printf("[%s]:i=%d\n",__FUNCTION__,i);

    exit(0);

}

Proj.h:            

#ifndef PROJ_H___

#define PROJ_H___



void func(void);



#endif

                          

            

[tom@CentOS7 minproj_extern]$ gcc *.c

[tom@CentOS7 minproj_extern]$ ./a.out

[main]i=10

[func]:i=10

运算符

位运算:<<  , >>  , | 或, &与 ,^异或:不同为1 , ~取反。其中|,&的优先级较低

例子1:Int I = B 1100 = 12;   i >> 1得到 110=6 ; 110<<1得到1100 =12

例子2:1100 & 1001 = 1000; 1100 | 1001=1101 ; 1100^1001 =0101

意义:把操作上A的第n位置1: A = A | 1 << n

 把操作数A的第n位置0: A = A & ~(1<<n)

测试操作数第n位: if ( A & 1<< n)

逻辑运算符:   !非

&&与,都对才对,左边错则右边不再运算。

||或,一个对就对。

三目运算符:A ? B : C

求字节运算符: sizeof();

强制类型转换   a=(int)b;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值