C语言学习笔记(一)

 一 、初识C语言

 1.C语言语言特点:
   代码量小
   执行速度快
   功能强大
   编程自由
2.C语言应用领域:
    C语言应用及其广泛,从网络后台到底层操作系统,从多媒体应用到大型网络游戏,均可用C语言开发。
3.学习C语言的理由:
     在过去的40年里,C语言已成为最重要,最流行的语言之一。
4.C语言的简洁:
      C语言仅有32个关键字,9种控制语句,34种运算符,却能完成无数的功能。

   

#include<stdio.h>
int main(void)
{
    printf("Hello world!\n");
    return0;
}
    

二、常量

1、常量是在程序中不能改变其值的量。

2、类型

常量类型实例备注
整型常量10,-30,0 包括整数、负整数和零在内的所有整数
实型常量3.14,-0.56,18.0由于计算机中的实行数是以浮点(Floating-point)式表示的,即小数点位置可以是浮动的,因此实型常量既可以称为实数,也可以称为浮点数
字符型常量

‘x’,‘X’,‘0’,‘9’

用一对单引号括起来的任意字符
字符串字面量“Hello!”,“K88”,"9"用一对双引号括起来的零个或多个字符

3、常量一般出现在表达式或赋值语句中。

4、定义常量方式

cnost 数据类型 常量名=值
#define 常量名 值

#include <stdio.h>

int main(void)
{
    int price = 3;
    int weight = 5;
    int sum = price * weight;
    printf("%d\n",sum);
    return 0;
}

三、变量

1、变量是在执行过程中是可以改变的量。

2、变量在使用前必须先定义,定义变量前必须有相应的数据类型。

3、定义变量方式

数据类型 变量名=值

4、变量名是用户定义的标识符。

5、标识符的命名规则

  • 不允许使用C关键字
  • 标识符只能由英文字母、数字和下划线组成
  • 标识符必须以字母或下划线开头
  • 标识符区分大小写
#include <stdio.h>                       //函数编译预处理指令

int main(void)                           //定义主函数
{                                        //函数开始标志
    int a;                               //用关键字int指定变量a的类型
    float b;                             //用关键字float指定变量b的类型
    char c;                              //用关键字char指定变量c的类型
    a = 1;                               //为int型变量a赋值整型常量1
    b = 2.5;                             //为float型变量b赋值实型常量2.5
    c = 'A';                             //为char型变量c赋值字符型常量'A'
    printf("a = %d\n", a);               //按整型格式输出变量a的值
    printf("b = %f\n", b);               //按实型格式输出变量b的值
    printf("c = %c\n", c);               //按字符型格式输出变量c的值
    return 0;                            //函数执行完毕返回函数值0
}                                        //函数结束标志

         

四、数据类型

1、数据类型分类

数据类型分类关键字变量声明实例
基本类型整型基本整型intint a;
长整型longlong int a;或long a;
长长整型long longlong long int a;或lomg long a;
短整型shortshort int a;或short a;
无符号整型unsignedunsigned int a;
unsigned long b;
unsigned short c;

实型

(浮点型)

单精度实型floatfloat a;
双精度实型doubledouble a;
长双精度实型lomg doublelong double a;
字符型charchar a;
枚举类型enumenum response{no,yes,none};
enum response answer;
构造类型数组int score[10];

char name[20];

结构体struct

struct date

{

     int year;

     int month;

     int day;

};

struct date d;

共用体union

union

{

     int single;

     char spouseName[20];

     struct date divorcedDay;

}married;

指针类型int * ptr;
char * pStr;
无类型void

void Sort(int array[ ],int n);

void *malloc(unsigned int size);

2、计算数据类型所占内存空间的大小

#include <stdio.h>

int main(void)
{
    printf("Date type                Number of bytes\n");
    printf("----------               ---------------\n");
    printf("int                      %d\n",sizeof(int));
    printf("long int                 %d\n",sizeof(long int));
    printf("long long int            %d\n",sizeof(long long int));
    printf("short int                %d\n",sizeof(short int));
    printf("float                    %d\n",sizeof(float));
    printf("double                   %d\n",sizeof(double));
    printf("long double              %d\n",sizeof(long double));
    printf("char                     %d\n",sizeof(char));
    return 0;
}

五、关键字

1、关键字分类

  • 数据类型关键字(12个) :

       char、short、int、long、signed、unsigned、float、double、struct、union、enum、void

  • 控制语句关键字(12个) :

        循环控制(5个):for、do、while、break、continue
        条件语句(3个):else、goto
        开关语句(3个):switch、case、default
        返回语句(1个):return

  • 存储类型关键字(5个) :

       auto、extern、register、static、typedef

  • 其他关键字(3个) :

       const、sizeof、volatile

2、关键字详解

  • char

       字符变量是用类型符char定义字符变量,char的主要作用就是声明字符型变量或函数。
char类型是个1字节,它的取值范围是[-128 , 127]  (-2^7 --- 2^7-1)。

  • short

       类型名为 short int 或 short,声明短整型变量或函数。
short类型为2个字节,它的取值范围是[-32768 , 32767] (-2^15 --- 2^15-1)。

  • int

       int为基本整型,声明整型变量或函数 。
       int类型为4个字节,它的取值范围是[-2147483648 , 2147483647] (-2^31 --- 2^31-1)。

  • long

       长整型:long int

                      long int类型为4个字节。

                      它的取值范围是[-2147483648 , 2147483647] (-2^31 --- 2^31-1)。

        双长整型:long long int

                          long long int类型为8个字节。

                          它的取值范围是[-9223372036854775808 , 9223372036854775807] (-2^63 --- 2^63-1)。

  • signed

        声明有符号类型变量或函数。
       

        因为计算机只认识0和1,所以任何数据到1计算机的底层都会换成0,1,那负数怎么存储呢?肯定这个“-”号是无法存入内存的,怎么办?很好办,做个标记。把基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是1,表明这个数是负数,其值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是0,表明这个数是正数,其值为除最高位以外的剩余位的值。

  • unsigned

        unsigned表示的是无符号数据类型,声明无符号类型变量或函数。

        被unsigned修饰的变量,其取值范围一定是大于0的。

         无符号整形    unsigned int            4字节   0 ~ 4294967295

         无符号短整型 unsigned short int   2字节   0 ~ 65535

         无符号长整形 unsigned long int    4字节   0 ~ 4294967295

         无符号字符型  unsigned char       1字节    0 ~ 255

  • float

       float类型也被叫做单精度浮点类型,声明浮点型变量或函数。
       float类型为4个字节,它的数值取值范围为[-3.4*10^-38 ~ 3.4*10^38]。

  • double

       double类型也被叫做双精度浮点类型,声明浮点型变量或函数。
       double类型为8个字节,它的取值范围为[-1.7*10^-308 ~ 1.7*10^308]。

补充内容:关于 %f 和 %lf 的使用

%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f。
double,双精度浮点型,对应%lf。

在用于输出时:
float类型可以使用%lf格式
double类型如果使用了%f格式可能会导致输出错误。

在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。

  • struct

       struct表示的是一种结构体,结构体是一种构造类型,它是由若干个成员组成。其成员可以是一个基本类型数据,也可以是一个构造体类型。struct是声明结构体变量或函数。

  • union

       union也被称为共同体。

       union 维护足够的空间来放置多个数据成员中的 ”一种”,而不是为每个数据成员配置空间。

       在union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。声明共用体(联合)数据类型。

  • enum

       enum表示的是枚举类型,利用关键字enum可以声明枚举变量,这也是一种数据类型。使用该类型可以定义枚举型变量,一个枚举变量包含了一组相关的标识符,其中每一个标识符都都对应一个整数值,称为枚举常量。

  • void

       void类型修饰符(type specifier)表示“没有值可以获得”。因此,不可以采用这个类型声明变量或常量。

  • for

       for表示的是一个循环语句,可以控制一个循环,并且在每一次循环时修改循环变量。在循环语句中for应该是最为灵活的,不仅可以用于循环次数已经确定的情况,而且还可以用于循环次数不确定而只给出循环结束条件的情况。

  • do

       do...while是一个比较特殊的循环,因为在有些条件下,不论条件是否满足,循环过程必须至少执行一次。

  • while

       while循环语句首先检查一个条件,也就是括号中的表达式。当条件为真时,就执行紧跟其后的语句或者语句块。每执行一遍程序,都将回到while语句处,重新检验条件是否满足。如果一开始就不满足,则跳过循环体中的语句,直接执行后面程序代码。如果第一次检验时满足,那么在第一次或其后的循环过程中,必须得有使条件为假的操作,否则循环将无法终止。

  • break

       有时候会遇到这样的情况,不管表达式检验的结果如何,都需要强制结束循环,这时候我们就可以使用break语句。

  • continue

       在某些情况下,程序需要返回到循环头部继续执行,而不是像break那样跳出循环。
       continue的主要作用就是结束本次循环。就是跳过循环体中尚未执行的部分,直接执行下一次循环的操作。 

  • if

       if是一种条件语句。If语句通过对表达式进行判断,根据判断的结果决定是否进行相应的操作。

  • else

       if...else语句。在if后的括号中判断表达式的结果,如果判断的结果为真,则执行紧跟if后语句块中的内容;如果判断的结果为假,则执行else语句后的语句块内容。也就是说,当if语句检验的条件为假时,就执行相应的else语句后面的语句或者语句块。

  • goto

       goto语句为无条件转移语句,可以使程序立即跳转到函数内部任意一条可执行语句。goto关键字后面带一个标点符,该标点符是同一个函数中某条语句的符号。符号可以出现在任何可执行语句前面,并且以一个冒号“:”作为后缀。

  • switch
  • case
  • default

       switch语句是多分支选择语句。
       if语句只有两个分支供选择,而在实际问题中常需要用到多分支选择。

       在c语言中可以用switch语句直接处理多分支选择情况,将程序的代码可读性提高。

       switch后面括号中的表达式就是要进行判断的条件。

       在switch语句块中,使用case关键字表示检验条件符合的各种情况,其后的语句是相应的操作。其中还有一个default关键字,作用是如果没有符合条件的情况,那么执行default后面默认的情况语句。

  • return

       return 0 代表程序正常退出,return 1代表程序异常退出。

       使用return语句可以返回一个变量内的值或一个指针,也可用return0,表示返回为空。

        return 代表调到函数外。

        return 0代表函数正常终止。return 1代表函数非正常终止。

        return 关键字的作用是返回程序流程的控制权,其副作用是返回一个值。

  • auto

       在缺省情况下,编译器默认所有的变量都是auto的,所以autu关键字可以省略。
        auto关键字用于定义一个局部变量为自动的,这意味着每次执行到定义该变量时,都会产生一个新的变量,并且对其重新初始化。

        声明自动变量,一般不使用 。

  • extern

       extern变量称为外部存储变量。

       extern声明了程序中将要用到但尚未定义的外部变量。通常外部储存都用于声明在另一个转换单元中定义的变量。

  • register

       register这个关键字请求编译器尽可能地将变量存在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。

  • static

       static变量为静态变量,将函数的内部变量和外部变量声明成static的意义是不一样的。

       static的两个重要作用:

      (1) 修饰变量。变量又分为局部变量和全局变量,但它们都存在内存的静态区。

      (2)修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数是否会与其他文件中的函数同名。

  • typedef

       typedef关键字用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)。

        typedef其实就是一个含义:类型重命名

     (1)对一般类型进行重命名 。

     (2)对结构体类型进行重命名 。

     (3)对指针进行重命名 。

     (4)对复杂结构进行重命名。

  • const

       const是constant的缩写,是恒定不变的意思,也翻译为常量和常数等。

       很多人都认为被const修饰的值是常量,这是不精确的,精确来说应该是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。

        关于const关键字的主要作用:

        (1)const修饰的只读变量。

        (2)const修饰一般变量。

        (3)const修饰数组。

        (4)const修饰指针。

        (5)const修饰函数的参数。

        (6)const修饰函数参数的返回值。

        (7)节省空间,避免不必要的空间分配,同时提高效率。

  • sizeof

       siezof的主要作用就是计算数据类型长度。

  • volatile

        volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值