Linux 基础命令

1. c语言特点

我的第一个c语言程序

#include<stdio.h>
int main()
{
       printf("hello word\n");
       return 0;
}

有志者,事竞成,破釜沉舟,百二秦关终属楚;

苦心人,天不负,卧薪尝胆,三千越甲可吞吴。×/

 

1.1 关键字

1.1.1数据类型相关的关键字

char , short , int , long , float , double , steuct , union .enmu ,singed , unsized , void

char 字符型,用char 定义的变量是字符型变量,占1个字节

char  ch=‘a'’;

short 是短正型,用short 定义的变量是短整形变量,占2个字节

short int a=11;

int 是整型,在32位系统下占4个字节,16位平台下占2个字节

int a=44;

long 长整型,在32位系统下占4个字节

long int a=66;

float 单浮点型(实数),占4 个字节

float b=3.8f;

double 双浮点型(实数),占8 个字节

double b=3.8;

struct 是与结构体相关的关键字,可以用来定义结构体类型,以后将结构体的时候具体讲

union 是共用体,联合体相关的关键字,以后讲

enum 是枚举类型的关键字,以后讲

signed 有符号(正负)的意思

       在定义char , int, short ,long ,数据的时候用signed修饰,代表定义的数据是有符号的,可以保存正数,也可以保存负数

例1: signed int a=10;

           signed int b=6;

          注意:默认请况下signed可以省略。

unsigned是无符号的意思

在定义char , int , short . long ,数据时用unsigned修饰,代表定义的数据是无f符号的数据,只能保存正数和0.

unsigned int a=101;

扩展     正数和负数在内存中到底是怎么存的

原码  ,  反码,  补码

规定:

正数的原码,反码,补码相同

5

0000 0101

负数 -5

最高位为符号位 最高位为1代表是个负数

源码:

1000 0101

反码,除了符号位,其余位取反

11111010

补码: 反码+1

1111 1011

注意,负数在内存是以补码的形式存放的

例1:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int a=-5;
    printf("%d\n",a);
    printf("%x\n",a);
    return 0;
}

void 空类型的关键字

char、int 、float 都可以定义变量

void不能定义变量,没有void类型的变量

void是用来修饰函数的参数或者返回值,代表函数没有参数或没有返回值

例1:

void fun(void)

{

}

代表fun函数没有返回值,fun函数没有参数

例2:

#include <stdio.h>
int main()
{
    char a;
    short int b;
    int c;
    long int d;
    float e;
    double f;
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(b));
    printf("%d\n",sizeof(c));
    printf("%d\n",sizeof(d));
    printf("%d\n",sizeof(e));
    printf("%d\n",sizeof(f));
    return 0;
}

1.1.2存储相关关键字

register、static、const、auto、extern

register 是寄存器的意思,用register修饰的变量是寄存器变量,

即:在编译的时候告诉编译器这个变量是寄存器变量,尽量将其存储空间分配在寄存器中。

注意:

1:定义的变量不一定真的存放在寄存器中。

2:cpu取数据的时候去寄存器中拿数据比去内存中拿数据要快

3:因为寄存器比较宝贵,所以不能定义寄存器数组

4:register只能修饰 字符型及整型的,不能修饰浮点型

register char ch;

register short int b;

register int c;

register float d;//错误的

5:因为register修饰的变量可能存放在寄存器中不存放在内存中,所以

不能对寄存器变量取地址。因为只能存放在内存中的数据才有地址

register int a;

int *p;

p=&a;//错误的,a可能没有地址

static 是静态的意思

static可以修饰全局变量、局部变量、函数

这个以后的课程中重点讲解

const

const 是常量的意思

用const修饰的变量是只读的,不能修改它的值

例3:

const int a=101;//在定义a的时候用const修饰,并赋初值为101

从此以后,就不能再给a赋值了

a=111;//错误的

const可以修饰指针,这个在以后课程中重点讲解

auto int a;和int a是等价的,auto关键字现在基本不用了

extern 是外部的意思,一般用于函数和全局变量的声明,这个在后面的课程中,会用到1.1.

1.1.3 控制语句相关关键字

if   else   break  contrnue for while do swish case goto  default

1.1.4 其他关键字

sizeof

是用来测变量/数组的占用存储空间的大小

例4:
 

int a;

int numl

num=sizeof(a);

typedef 关键字,作用是给一个已有的类型,重新起个类型名,并没有新建一个类新

例如:

INT16 a;

U8 ch;

INT32 b;

这些都是typedef定义出来的新的类型名,其实就是unsigned char 及 short int 的别名

typedef 其别名的用法:

1 . 用想起名的类型定义一个变量

short int a;

2. 用新类型名替代变量名

short int INT16;

3 . 在最前面加typedef

typedef short int INT16;

4. 用新的类型名定义变量

INT16 b;

 

volatile 以改变的意思

用volatile定义的变量,是已改变的,集告诉cpu每次用volatile变量的时候,重新去内存中取,保证用的是最新的值,而不是集村其中的备份。

 

关键字的命名规则

在C语言中给变量和函数起名的时候,由字母   数字  下划线构成,必须以字母或下划线开头

 

格式化输出字符:

%d  十进制有符号整数    %u  十进制无符号整数

%x 十六进制表示的整数  %o 以八进制表示的整数

%f float 型浮点数          %lf double型浮点数

%e 指数形式的浮点数

%s 字符串     %c  单个字符

%p 指针的值

 

 

不同类型之间混合运算时涉及到类型的转换问题,有两种中转换形式:自动转化        强制类型转换

自动转换规则:占用内存字节少的类型,向占用内存字节数多的类型转换,以保证精度不降低

 

 

2.1 数组的概念

数组是若干个相同类型的变量在内存中有序存储的集合。

int a[10];//定义了一个整形的数组a,a是数组的名字,数组中有10个元素,每个元素的类型都是int 类型,而且在内存中连续存储。这10个元素分别是a[0] a[1] ......a[9],并且连续存储。

 

2.2 在程序运行时,操作系统会将内存分区

    1. 堆

             在动态申请内存的时候,在堆里开辟内存

   2.栈

           主要存放局部变量

   3.静态全局区

        1. 为初始化的静态全局区

              没有初始化的静态变量(定义变量的时候,前面加static修饰),没有初始化的全局变量

       2.初始化的静态全局区

            初始化的静态变量和全局变量

   4.代码区

       存放程序代码

  5. 文字长常量区

       存放常量

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值