12月7随笔
else if 语句使用时注意在判断中只进入一次。
if(year % 4 ==0){
if(year % 100!= 0)
}
else if(year % 400 ==0) //不会进到这一句的
vc 编译器 F10 调试 F11进函数 可以通过宏定义可以消除warning 。
32位 指针是4字节
volatile 保证内存可见性。每次取变量从内存中取 .在c编译环境,const 从语法层面限制了 变量不可定义,从而可以通过指针修改内存中变量的值。在cpp编译环境,const 会被优化,其值被送往寄存器,从而不可改变。linux环境下可以加 -o2 使gcc编译环境同样优化const。
volatile const int num = 10;
static 修饰局部变量延长了生命周期,没有改变作用域。
初始化不是随机值,而是0。
extern 还需要研究和 static 修饰全局变量 还不太懂,待研究
static int num =0 // 只会静态初始化一次
内存的分配:
栈 局部变量
堆区 动态内存申请
静态区 静态变量,全局变量。
练习1. 给定两个整形变量的值,将两个值的内容进行交换
int main(){
int a = 10,b = 20;
int tmp = 0;
tmp = a;
a = b;
b = tmp;
printf("%d %d",a,b);
}
练习2.不允许创建临时变量,交换两个数的内容
int main(){
int a=10,b=20;
b = a +b;
a = b -a; //a =30 - 10
b = b -a; //b = 30 -20
printf("%d %d",a,b);
}
练习3. 求10 个整数中最大值
int main(){
int i = 0;
int a[10]={0};
for (i=0;i<10;i++){
a[i]= 10*i;
}
int max = a[0];
for (i=0 ; i<10 ;i++){
if(a[i]>max){
max = a[i];
}
}
printf("%d",max);
}
练习4. 将几个数按从大到小输出
//插排
#include <stdio.h>
int main(){
int j =0;
int i = 0,tmp = 0;
int a[5] = {1,5,7,2,9};
for(i = 1 ;i < 5 ;i++){ //假设第一个位置排好了
tmp = a[i];
for( j = i-1;j>=0&&tmp > a[j];j--){ //一直找,直到j位置>=tmp
a[j+1] = a[j];
}
a[j+1] = tmp; //j位置腾出来,j--后 用j +1 抵消,把tmp放进去
}
for(i =0 ;i< 5;i++){
printf("%d ",a[i]);
}
}
练习5.求两数最大公约数
#include <stdio.h>
int main(){
int a =75,b = 25;
int c = 0;
while(b !=0){ //辗转相除
c = a%b;
a = b; //把ab较小的数给a
b = c; //把余数给b
}
printf("最大公约数是%d",a);
}