1.C语言中的控制流程:
顺序:
循环:for ;while;;do.....whie ;前两者可转换;
选择:if else; switch
case 1: break; case 2 break;
2. break语句通常用于跳出switch、do-while、for、while等循环语句,不能用于跳出if语句。
continue:跳出此次循环,继续执行下一次循环
return 终止函数或者终止函数向主调函数返回一个值;
3. 数组 a[5] = {1,2,3,4,5};
4.c语言的基本单位是函数,模块化;c++的基本单位是类;
5.注意局部变量会屏蔽全局变量;
6.内存:一个字节=8个位(8个01);
7. int* p; 变量名p,里边存放的是地址编号;int* 是数据类型,表示变量P是存放int类型变量的地址的一个指针变量;
*p指以p内容为地址的变量。
指针就是地址,地址就是指针,地址是内存单元的编号,是从0开始的整数,范围0~4G。(地址总线32位,pow(2,32)=4G).
1k=1024b; 1M=1024b; 1G=1024M;
8.&取地址符,一般int i; 则 p =&i; p表示一个存放地址的变量,i是一个int变量;
9.*p =i是对的----*p是以p内容为地址的那个变量,就是i;
10.野指针问题:指向了同一内存的不同指针,下图,只释放一次即可,如free(p); 重复释放就报错。
free后,申请内存的那个指针就会变成野指针(声明了,但是没有任何指向);在操作后:将指针置为NULL,p=NULL;
11.实参和形参是不同的变量。
通过被调函数来修正main()函数的值,被调函数使用形参使用*p。
12.指针与数组: *(p+i)= p[i]
sizeof(变量名)=变量字节数;p指向char类型变量(char类型变量占1个字节);q指向int类型变量(占4个字节);r指向double类型变量 (占8个字节)。
sizeof(数据类型)=数据类型字节数 ;
硬件内存里,地址要4个字节来存放(32位系统,64位是8个字节),sizeof(p)也就是4个字节。
13.动态内存分配---malloc();realloc()补充分配内存;
传统:a[5]---系统分配20个字节内存,函数运行结束自动释放;
14. int* p = (int*) malloc(4);p是地址占4个字节,p指向的变量分配4个字节,一共占了8个字节;
free(p)是释放了
15.函数的执行按照栈分配原理:
16.多级指针:
int* p =&i; -> p的类型是int*(存放int类型变量的地址);
int**q = &p; -> q的类型是int**(存放int*类型变量的地址);
p->age 等价于(*p).age;
发送指针的优点: 内容少,速度快!
17.枚举:一种数据类型,本质上将0~n数字i替换成了实际意义,代码更安全。
18.逻辑运算
&&逻辑与; ||逻辑或
&二进制位与; |二进制位或; ~按位取反;^按位异或
19. 结构体数组:定义
struct student{
int xh;
char *name;
char *sex;
}stu[30];
定义了一个结构体数组stu,共有30个元素,stu[0]--stu[29];
每个stu[]元素都是struct student类型
点操作符引用:
struct student{
int xh;
char name[];
}stu[4];
strcpy(stu[0].name,"Tom");
stu[1].xh = 1;