c语言基础

1、c语言的基本数据类型(六种)

  可以在语言中使用   sizeof(char)方法来得到对应数据类型的占用的内存

  1.char  一字节

  2.int  四字节

  3.short  二字节

  4.float   四字节

  5.long  四字节

  6.double  八字节

  除此之外,整型数据类型可以修饰为无符号数据类型(char、int、short、long),默认情况下都是有符号数据类型。无符号数据类型unsigned的最高位是数值位,而不是符号位。有符号数据类型signed 的最高位为符号位。

  例如  unsigned char (0,255)   signed char(-128,127)。

2、c的输出函数

  C语言的输出使用占位符的方式。

  1.char : printf(" %c", char);

  2.int : printf("%d",int)

  3.short :printf(" %hd",short)

  4.float  :printf("%f",float)

  5.long :printf("%l",long)

  6.double: printf("%lf",double)

  7. %u  - 无符号

  8.%x - 16进制表示

  9. %o - 8进制表示

  10.%s - 字符串

  11. %ld - long int

  12. %lld - long long

 

3、输入函数

  输入函数:scanf()的方式,也是使用占位符的方式。

  

main(){
   char c[4];
   scanf("%s",&c);   
           
}

  c语言中不检测数组越界,可以输入大于4个字节的字符串。但是会把之后的内存给覆盖掉。

 

4、内存地址的概念

  内存的最小单位为byte。

  内存需要有特定的编号,不然没法使用,地址总线没法找到。

  cpu 通过地址总线找到需要操作的内存,通过控制总线来控制对该内存的读和写操作。通过数据总线来传输数据。

 

5、指针的入门

  指针是一个保存内存地址(编号)的整数。

main(){
  int i = 11;
  int* p = &i;   //申明一个指正变量,保存了i的地址。
  *p = 22; //通过指针变量来修改i的值。
}

   1.指针注意事项:

    1.指针必须先要进行初始化操作才能使用,否则系统会自动给指针变量一个随机的初始值,一旦使用就会导致奔溃。

    2.定义的指针类型必须和初始化时给的变量的地址(&i)的变量i的类型对应。否则不能通过指针来修改值。

  1.指针的使用-交换两个数:

    可以通过引用传递来达到两个数交换的效果。如下代码:

//引用传递的使用。
main(){
  int i = 11;
  int j = 22;
  swap(&i,&j)
}

void swap(int * i,int* j){
     int temp = *i;
     *i = *j;
     *j = temp;
}

   3.c语言中的函数不能返回多个值,可以通过引用传递传入引用到函数然后通过改传入的引用来进行对应的操作达到类似的返回多个值得效果。

   4.指针和数组之间的关系:

    指针变量在进行p+1 p+2这样的位移操作,每+1之后指针变量移动几个字节取决于指针变量的类型。例如:int* p  p+1之后移动4个字节, char* p  p+1之后移动1个字节。

   5.指针变量的长度:指针变量占用的内存取决于是多少位的操作系统。32位的操作系统指针变量的长度为4字节。64位的为8个字节。

   6.多级指针:int i = 11,一级 int* p1 = &i, 二级指针 int** p2 = &p1, 三级指针int*** p3 = &p2。

    

 6、C语言中常用的字符串定义方式。

  

main(){
  char str[] = {'h','e','l','l','o','\0'};  //第一种  '\0'表示结束。
  char str2[] = "hello"; 第二种    表示常量。
  char* p = "hello" 第三种, 通过指针变量的方式。输出的时候需使用%s的占位符。
   }

 

7、静态内存分配

  静态内存分配分配的是栈内存的空间。栈内存的内存特点: 1.栈内存的大小固定  2.由系统分配和回收。回收的速度较快。

 

8、动态内存分配

  动态内存分配的是堆内存。通过malloc来申请堆的内存空间。接受一个参数(申请堆内存的大小),返回一个值(申请到的堆内存的首地址)

       申请的堆内存还得手动释放掉,否则会一直占用内存空间。

main(){
  int* p = malloc(sizeof(int) * 8);   //申请可以存放8个int数值得堆内存

  free(p); //释放掉申请的堆内存。   
}

  c中的堆内存会有一张表记录着对内存的使用情况,(首地址 + 大小)。

 

9、结构体

     关键字 struct 。

struct Student{  //8个字节 --是占用字节最多的数据类型的整数倍且是大于等于所有之和。
  short age,  //两个字节
  char gender,  //一个字节
  int score      //四个字节
 void(*p)();   //函数指针
}

void say(){
  printf("我是***同学");
}

main(){
  struct Student stu = {24,'f',100,&say}  //赋值,注意-函数指针的赋值
  stu.age;
  stu.gender;
  stu.score;      
  struct Student* stup = &stu;  //结构体指针的使用
}

 

10、联合体

  关键字 uinon: 联合体中  使用的是同一块内存。目前对着内存的使用没这么紧张,所以使用得很少。

 

11、枚举

  关键字enum.

enum Week{
  MON,TUE,WEN,THU,FRI,SON,SAT   
}

main(){
  enum Week day = MON;     //day 的值只能从Week中取
}

 

12、自定义类型

  关键字:tyepdef

typedef struct Student{  //8个字节 --是占用字节最多的数据类型的整数倍且是大于等于所有之和。
  short age,  //两个字节
  char gender,  //一个字节
  int score      //四个字节
 void(*p)();   //函数指针
} Stu;   //定义类型为 Stu。使得用起来更简洁,方便。

main(){
    Stu stu ={24,'f','100'}
}

 

posted @ 2018-06-18 18:39  halo-漾  阅读(193)  评论(0编辑  收藏  举报