day1(笔记)(指针之前)
运算符:
sizeof的常用用法:
1、sizeof(arr) 类型*个数/int*p=arr sizeof(p) 只能是4或8
2、sizeof(arr[0])
3、sizeof(arr)/sizeof(arr[0])
*sizeof括号里不运算,结果是最大的
*变长数组不能初始化
只要式子中出现了位运算符,必须转换成二进制’补码‘再进行运算
数组:
*实参与形参之间是以赋值的方式进行传递数据的,并且是单向值传递 数组作为参数传递时,是"址传递"(首地址),相当于调用者与函数共享数组
数组越界可能的影响:1、一切正常 2、段错误(核心已转储) 3、脏数据
二维数组
变长数组
进制转化:
原反补:最高位是符号位不变化,正数的反,补码都是本身。
-127
1111 1111 原码
1000 0000 反码
1000 0001 补码
类型限定符(常用几个):
static:
改变存储位置:
改变局部变量(块变量)的存储位置,由stack改为data(初始化)或者bss(未初始化,初始化为0)
延长生命周期:
延长局部变量的生命周期,直到程序结束才释放
限制作用范围:
限制全局变量的使用范围,限制只能在本文件内使用
注意:使用static修饰全局变量,可以防止该变量被别的文件使用,以及防止命名冲突
const
"保护"变量的值不被显式地修改
**如果通过内存进行修改,还是可以改的
**使用const修饰data段数据,那么该数据会存储到text段中,如果强制修改会段错误
递归:
***例题:使用递归模拟N层汉诺塔的移动过程***
#include <stdio.h>
void move(int n, char from, char to, char aux)
{
if (n==1)
{
printf("从 %c 移动到 %c\n", from, to);
return;
}
move(n-1,from,aux,to);
printf("从 %c 移动到 %c\n", from, to);
move(n-1,aux,to,from);
}
int main()
{
int n;
printf("请输入汉诺塔的层数:");
scanf("%d", &n);
move(n, 'A', 'C', 'B');
}