C语言入门-day2

昨天偷懒,没有更新,反正是学习笔记,并不是入门教程,教程的话老老实实找菜鸟教程就行

目录

存储类、运算符、判断、循环

一、存储类

    存储类分为四个:auto、register、static、extern

    auto:auto存储类是所有局部变量默认的存储类

    register:表示将数据寄存在寄存器内,这个关键字并不意味着数据真正在寄存器内寄存,具体数据在什么位置和硬件实现有关(反正我也不知道)。

    static:只会进行一次初始化,只在指定函数或者指定文件有效

    extern:提供对于所有程序文件都可见的变量(实际上用法相当于将其他文件的变量或者方法引入过来)

    ※static存储类的实验:

#include<stdio.h>
void func1(void);
static int count = 10;
int main()
{
	while(count--) {
		func1();
	}
	return 0;
}

void func1() {
	static int i = 0;
	i ++;
	printf("count = %d, i = %d\n", count, i);
}

    输出结果

    其中count的作用域是在本文件有效,而i的作用域是func1;两者都仅会初始化一次

    ※extern存储类的实验:

    Extern.c代码:

#include<stdio.h>
int count;
extern void method(void);
int main()
{
	count = 10;
	method();
	return 0;
}

    support.c代码:

#include<stdio.h>
extern int count;
void method(void)
{
	printf("count = %d", count);
}

    执行结果:

    可以看出,我们在文件Extern.c中成功引入了方法method,而在文件support.c中成功引入了count全局变量

    ※register存储类实验:

#include<stdio.h>
#include<time.h>

#define TIME 900000000 //注意:这个数字最好是大一点
int m, n = TIME;

int main()
{
	time_t start, stop;
	register int a, b = TIME;
	int x, y = TIME;
	
	time(&start);
	for(a = 0 ; a < b ;  a++);
	time(&stop);
	printf("%d \n", stop - start);
	
	time(&start);
	for(x = 0 ; x < y ; x ++);
	time(&stop);
	printf("%d \n", stop - start);
	
	time(&start);
	for(m = 0 ; m < n ; m ++);
	time(&stop);
	printf("%d \n", stop - start);
	
	return 0;
}

    执行结果:

    我们可以看出,register作用域执行循环的时间要远远小于另外两个(register直接是0秒,而另外两个是3和2),如果开始的TIME定义的非常小的话,将会导致如下结果:三个输出都是0

二、运算符

    学习了java之后,我对于运算符真的是,,,像见到亲人一样2333

    C语言内置了众多的运算符,包括,算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和杂项运算符

    算术运算符:

    +、-、*、/、%、++、--

    关系运算符:

    ==、!=、<、>、>=、<=

    逻辑运算符:

    &&、||、!

    位运算符:

    &、|、^、~、<<、>>

    赋值运算符:

    =、+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=

    杂项运算符:

    sizeof、&、*、?:

    ※实际上重点不是运算符,而是位运算符的骚操作

    ※利用异或交换两个数字的值:

int a = 25;
int b = 26;
a = a ^ b; //a是两个数的不同信息
b = a ^ b; //b和a的不同信息 ^ b = a,现在b的值就是a了
a = a ^ b; //b和a的不同信息 ^ a = b,因为表达式中的b是a,所以直接换成a。

    ※利用与运算判断一个数是否是2的整数次幂

int num = 4;
bool flag = (num > 0) && (num & (num - 1) == 0);

    就酱紫

    ※取余原则

        1.取余的结果可能是正数或者负数,由第一个操作数来决定

        2.取余的双方都只能是整数,如果不是整数,编译器将报错

    运算法则:(int 和 long)

        如果整数类型值正整数,左边补0

        如果是负数,左边补1

        如果是无符号数,补0

三、判断

    判断的写法一共也就几种,if、if-else、switch这三种语句

    

if(1 == 1) {
    return 0;
}

if(1 == 2) {
    return 0;
} else {
    return 1;
}

int i = 10;

switch(i) {
    case 1:
        return 1;
        break;
    case 2:
        return 2;
        break;
    default :
        return 0;
}

emm,就这样

四、循环

    循环的写法也就是几种,while、for、do-while,没有什么好记的。

猜你喜欢

转载自blog.csdn.net/jdie00/article/details/81153219
今日推荐