C_Cpp-C语言回顾

一.数据类型及长度

1.java(虚拟机平台,数据长度固定) 
	byte short int long float double char boolean
	 1    2     4    8    4      8     2  不确定(4或1) 

2.C语言(不同平台数据长度不同)
	char short int long float double
	  1   可用sizeof获取数据长度
	signed(默认) unsigned
	
	枚举
	enum WeekDay{
		Monday=1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
	};
	enum WeekDay wd = Sunday;
	printf("%d\n",wd);
	
	联合体
	union mix{ 
		double d; int i; char c; 
	};
	在Union中,所有成员不能同时存在,总长度等于最长成员的长度
	
	结构体
	struct date { 
		double year;int month;char day; 
	};		
	在struct中,各成员同时存在,总长度等于所有成员之和	

二.输入输出

#include <stdio.h> // 输入输出库
#include <stdlib.h>
system("java hello");// 调用系统命令,执行java代码
system("pause");// 调用系统命令,让控制台暂停
	
1.输出
	%hd short half d 
	%d  int
	%ld long int
	%f  float
	%lf double  long float 
	%u  无符号数
	%x  十六进制
	%o  八进制
	%c  char
	%s  字符串
	int i=3;
	printf("int =%d\n",i);
	
2.输入
	int i;
	char c[3];
	scanf("%d",&i);
	scanf("%s",c);

三.指针

1.指针代表内存地址  
指针变量 存放内存地址的变量  
*含义 
	1.乘法   
	2.指针变量类型 int* p;
	3.指针变量取值 *p = 2;
	
2.指针常见错误 
	1不给指针变量赋值,直接用,野指针 int* p; *p =2;
	2指针类型和赋值类型不匹配 float f; int* i=&f;
			
3.指针和数组
	数组元素在一块连续内存中 
	数组变量对应数组首元素地址 int a[3]; a=&a[0];
	char* c="HelloWorld" 表示字符串char c[]="HelloWorld";

4.多级指针
	int i=3;
	int* p1=&i;
	int** p2=&p1;
	int*** p3=&p2;	

5.函数指针
	int add(int x,int y){    
		return x+y;
	}
	int (*f)(int x,int y);
	f=add;
	f(3,5); 

四.内存分配

data区 常量池  
code区 存放代码 main()等等
栈区 静态自动分配和释放 连续分配
堆区 动态手动分配和释放 不连续分配(链表)
	malloc() 手动分配内存 memorry alloc
	free() 手动释放内存
	
int* p=(int*)malloc(sizeof(int)); //手动分配内存
*p=3;
free(p);  //手动释放内存

简书: http://www.jianshu.com/p/b35971db05df
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/72455747
GitHub博客:http://lioil.win/2017/05/17/C_review.html
Coding博客:http://c.lioil.win/2017/05/17/C_review.html