初始C语言(3)

初始C语言(3)

初始C语言第三节


文章目录

  • 初始C语言(3)
  • 前言
  • 一、操作符
    • 1.1算术操作符
    • 1.2移位操作符
    • 1.3赋值操作符:
      • 1.3.1 复合赋值符:
    • 1.4单目操作符(双目操作符)
    • 1.5关系操作符
    • 1.6条件操作符(三目操作符)
    • 1.7逗号表达式
    • 1.8下标引用,函数调用和结构成员:
    • 1.9函数调用操作符
  • 二、常见关键字
  • 总结


前言

这章笔记主要包括操作符和关键字


一、操作符

1.1算术操作符

± \pm ± ∗ \ast / %(取模)`

int main(){
    int a=7/2;
    printf("%d\n",a);//结果是3
    float f=7/2;
    printf("%f\n",f);//结果还是3
    return 0;
}

/(除号)操作符两端的操作数都是整数,执行的是整数除法,如果至少有一个操作数是浮点数,执行的才是浮点数除法;

int main(){
    float f=7.0/2;
    //7/2.0;
    printf("%f\n",f);//结果还是3.5000;
    return 0;
}

%(取模)操作符
关注的是除法后的余数;%操作符两端的操作数必须是整数;

1.2移位操作符

移位操作符:<< >>
整数,可以写成二进制,可以将二进制位移动;
比如:

int a=-1;
a<<1;//表示将a的二进制数向左移动一位;

位操作符:(二进制位)

1.3赋值操作符:

=

1.3.1 复合赋值符:

复合赋值符+= -= *= /= &= ^= |= >>= <<=

int main(){
    int a=10;//创建变量,并初始化;
    a=20;//赋值
    return 0;
}

1.4单目操作符(双目操作符)

单目操作符:有一个操作数
ps:双目操作符就是两个操作数;
初始C语言(3)_第1张图片
c语言如何表示真假的呢?
0表示假,非0表示真;

int main(){
    int a=10;
    if(a)
    printf("hehe\n");
    if(!a)
    printf("haha\n");
}

-(负号)

 int main(){
     int a=-10;
     printf("%d\n",+a);//-10;
     printf("%d\n",-a);//10;
 }

sizeof:以字节为单位;

int main(){
    int a=10;
    char c='w';
    int arr[10]={0};
    printf("%d\n",sizeof(a));//4
    printf("%d\n",sizeof(c));//1
    printf("%d\n",sizeof(arr));//40
     printf("%d\n",sizeof(int));//4
    printf("%d\n",sizeof(char));//1
   int sz=sizeof(arr)/sizeof(arr[0]);//10,数组元素的个数
   printf("%d\n",sz);
}

sizeof后面括号中写的是变量的名字就可以把括号省略掉,如果后面是变量的类型就不能省略掉;
sizeof是一个操作符不是一个函数!!(因为一定条件下括号可以省略掉);
strlen是库函数,只能针对字符串,求字符串长度,计算的字符串中\0之前的字符个数;
sizeof是操作符,是计算所占内存空间的大小;
前置++:先++后使用;
后置++:先使用后++;

int main(){
    int a=10;
    int b=++a;
    //a=a+1; b=a;先++后使用;
    int c=a++;
    //c=a; a=a+1;//先使用后++;
    printf("%d\n",a);
    printf("%d\n",b);
    printf("%d\n",c);
}

(类型):强制类型转换;

int main(){
    int a=3.14;//err 3.14默认为double类型,a是int型
    int a=int3.14//强制类型转换;合理使用
    return 0;
}

1.5关系操作符

初始C语言(3)_第2张图片两个字符串是不能用==来判断相等的

int main(){
    char arr1[]="abcdef";
    char arr2[]="adcdef";
    if(arr1==arr2){
        printf("==\n");    
    }
    else
    {
        printf("!=\n");//结果是!=表示两个字符串是不能用==来判断相等的;    
    }
}

字符串比较必须使用strcmp库函数来比较;

int main(){
    char arr1[]="abcdef";
    char arr2[]="adcdef";
    if(strcmp(arr1,arr2)==0){
           printf("==\n");   
    }
    else
    {
        printf("!=\n");
}

double也不能直接用==来比较
逻辑操作符:只关注真假
在这里插入图片描述
&&逻辑与–并且;
||逻辑或–或者;
条件操作符:

1.6条件操作符(三目操作符)

在这里插入图片描述

int main(){
    int a=10;
    int b=0;
   if(a>5)
      b=3;
   else
      b=-3;
      //(a>5)?(b=3):(b=-3);//相当于选择结构
      b=(a>5?3:-3);  
     printf("%d\n",b);//b=3;
}

1.7逗号表达式

exp1,exp2,exp3…expN
逗号表达式的特点:从左向右以此计算,整个表达式的结果是最后一个表达式的结果;

int main(){
    int a=3;
    int b=5;
    int c=0;
    int d=(a+=2,b=b-c+a,c=a+b);//结果是15 a=5,b=10, c=5+10;
    printf("%d\n",d);
    return 0;
}

1.8下标引用,函数调用和结构成员:

在这里插入图片描述

int main(){
    int arr[10]={0};//0~9
    arr[4]=5;//4[arr]语法也是支持的;
    //arr 4是[]的两个操作数
    //2+3
    //2+3是+的操作数
    //下标引用操作符
}

1.9函数调用操作符

int Add(int x,int y){
    return x+y;
}
int main(){
    int c=Add(2,3);//()是函数调用操作符,操作数是Add,2,3;
    printf("c=%d\n",c);
}

函数调用操作符的括号不能省略;

二、常见关键字

初始C语言(3)_第3张图片1.关键字是直接使用的
2.变量名不能是关键字
auto:自动—自动变量的
局部变量都是自动创建自动销毁的,所以局部变量都是auto修饰的;
auto一般省略掉;
循环:
break:case break continue default–默认 do while for while
基本数据类型:
char short int…signed----有符号的 unsigned—无符号的 void 无类型
修饰变量,指针:
const
选择分支:
if else goto
自定义类型:
enum–枚举
extern–是用来申明外部符号的;
register—寄存器关键字
return —返回
sizeof—操作符
static—静态的,修饰变量
struce----结构体
typedef----类型重定义
union—联合体/共用体
volatile
初始C语言(3)_第4张图片
register的作用:

int main(){
    //建议把10放在寄存器中
    register int a=10;
    return 0;
}

typedef—类型重定义 复杂的类型简单化`

typedef unsigned int uint;
int main(){
    unsigned int num;
    uint num2;
    return 0;
}

static关键字:
1.修饰局部变量:
static修饰后的局部变量只能在自己所在的.c文件内部使用

void test(){
    int a=3;
    a++;
    printf("%d\n",a);
}
int main(){
    int i=0;
    while(i<10){//结果打印出来是10个4
        test();
        i++;    
    }
    return 0;
}

在这里int a变量没有声明为static,在test函数内部属于局部变量,进入函数自动创建,出函数自动销毁,所以打印结果是10个4;
但是如果将int a声明为static类型结果如下

void test(){
   static int a=3;
    a++;
    printf("%d\n",a);
}
int main(){
    int i=0;
    while(i<10){//结果打印出来是4,5,6,7,8,9,10,11,12,13
        test();
        i++;    
    }
    return 0;
}

普通的局部变量是放在内存的栈区上的,栈区存储的是临时变量,进入局部范围,变量创建,除了局部范围,变量销毁
当static修饰局部变量时,局部变量是在静态区开辟空间的,这时的局部变量,出了作用域变量不销毁,下次进去作用域,使用的还是上一次遗留的数据
(改变了存储位置,由栈区–>静态区,使得生命周期发生了变化)直到整个程序结束才会销毁;
2.修饰全局变量:
全局变量是具有外部链接属性的,如果全局变量被static修饰,这个外部链接属性就变成了内部链接属性。
其他源文件就没法通过链接找到这个符号的
3.修饰函数
函数是具有外部链接属性的,其他源文件想使用函数只需要正确的声明(函数形式参数只需要写出参数类型即可),但是函数被static修饰,外部链接属性就变成了内部链接属性,这个时候函数只能在自己所在的.c文件内部使用,不能被其他文件使用;
链接属性分为:
外部链接属性—外部文件均可以看到
内部链接属性—static
无链接属性—局部变量

总结

  这章笔记主要包括一些常用的操作符以及常见关键字的理解和使用,希望对大家有帮助!

你可能感兴趣的:(c语言,算法,开发语言)