C语言初学数组、操作符以及常见关键字详解笔记

数组

一组数的意思

c语言中给数组的定义:一组相同类型元素的集合

int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};//arr为数组名,int为元素类型
    int arr1[10]={1,2,3,4,5}//初始化数组arr1的前5个元素为1,2,3,4,5,剩下的五个元素默认都为0 
	return 0;
}

image-20210405161233850

如图在内存中找了连续的空间,名字为arr,下面对应的元素的下标。

int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    //printf("%d",arr[5]);//打印结果为6
    访问数组全部元素,一次一个个打印
    int i=0;
    while(i<10)
    {
     	printf("%d",arr[i]);
        i++;
    }
    return 0;
}

操作符

单目操作符

~ 按位取反

把十进制的数字可以转换成二进制
二进制有三种表示形式:原码,反码,补码
二进制位中最高位是符号位
最高位是1,表示负数
最高位是0,表示正数
1000000000000000001-原码
0111111111111111110-反码
0111111111111111111-补码
整数在内存中存储的是二进制表示的补码
正整数的原码、反码、补码相同

int main()
{
   	int a=0;
    printf("%d\n",~a);//-1
    //00000000000000000000000000000000
    //11111111111111111111111111111111--补码
    //11111111111111111111111111111110--反码
    //10000000000000000000000000000001--原码
   	return 0;
    //把十进制的数字可以转换成二进制
    //二进制有三种表示形式:原码,反码,补码
    //二进制位中最高位是符号位
    //最高位是1,表示负数
    //最高位是0,表示正数
    //1000000000000000001-原码
    //0111111111111111110-反码
    //0111111111111111111-补码
    //整数在内存中存储的是二进制表示的补码
    //正整数的原码、反码、补码相同
  
}

++操作符,–操作符

int main()
{
    int a=10;
    int b=a++;//后置++,先使用a的值,再让a+1,a参与运算后加一
    printf("a=%d b=%d",a,b);//a=11 b=10 
    int c=10;
    int d=++c;//前置++,先给c的值加一,再参与运算
    printf("c=%d d=%d",c,d);//c=11,d=11
    int e=10;
    int f=e--;//后置--,先使用e的值,再让f-1,e参与运算后-1
    printf("e=%d f=%d",e,f);//e=9 f=10
    int g=10;
    int h=--g;//前置--,先给g的值-1,再参与运算
    printf("g=%d h=%d",g,h);//g=9 h=9
    return 0;
}

(类型)强制类型转换

  int main()
  {
      int a=(int)3.14;//将3.14转换为整型
      printf("%d\n",a);
    return 0;
  }

关系操作符

//>,>= ,<,<=,!=(不等于),==(等于)
int main()
{
    int a=5;
    if(a=3)
    {
        printf("haha");//这里会打印吗?
    }
    return 0;
}

image-20210405173805198

答案是会打印,因为if判断语句里面a=3,只是把3赋给a,此时a=3,为真,所以会进来打印,判断a=3应为a==3

逻辑操作符

逻辑与

int main()
{
    int a=3;
    int b=5;
    int c=a&&b;//逻辑与
    printf("%d",c);//看a与b的真假,a,b都为真才为真
    return 0;
}

逻辑或

int main()
{
    int a=0;
    int b=5;
    int c=a||b;//逻辑或
    printf("%d",c);//看a与b的真假,a,b都为假才为假;当a,b至少一个为真时则为真
    return 0;
}

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

exp1?exp2:exp3

exp1满足,则执行exp2,否则exp3

int main()
{
    int a=10;
    int b=20;
    int max=0;
    /*if(a>b)
    {
        max=a;
    }
    else
    {
    	max=b;    
    }*/
    max=(a>b?a:b)//与前面注释等价,a>b,执行a,否则执行b
    return 0;
}

逗号表达式

int main()
{
    //逗号表达式从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果
    int a=(3+1,5+2,8+2,2+4);
    printf("%d\n",a);//6
    return 0;
}

下标引用操作符、函数调用操作符

int main()
{
    int arr[10]={1,2,3,4,5};
    arr[3]=5;//这里的[]就是下标引用操作符
    return 0;
}
int main()
{
    printf("hello world");//()为函数调用操作符
    return 0;
}

常见关键字

auto

int main()
{
    {
        int a=10;//auto关键字是省略掉的
        //局部变量都是自动创建,自动销毁的,所以c语言中的局部变量就是自动变量
    }
    return 0;
}

break-循环/switch语句

continue-循环

case-switch case

default–应用于switch

enum-枚举关健

extern-声明外部符号的

//extern声明一下来自外部的符号
//一个文件创建的全局变量可以在另一个文件中用extern声明,则可以使用

goto语句–不建议使用

register-寄存器-关键字

//寄存器也是一种存储器
//电脑上的存储器:硬盘、内存、高速缓存(cache)、寄存器
int main()
{
    register int a=10;//当a频繁使用时,建议把a放在寄存器中,对a的处理更快
    //编译器决定
    return 0;
}

signed-有符号的

当一个数有正负时,可以使用 signed int num;定义;当一个数无负时,可以使用 unsigned int num=10;比如年龄。

typedef-类型定义

typedef unsigned int uint;
//定义一个类型的不同叫法
int main()
{
    unsigned int num=10;
    uint num2=20;//uint时unsigned int的别名
    return 0;
}

static关键字

1、static修饰局部变量

image-20210405215206523

每次进去test函数,局部变量a会重新定义,因为局部变量所能使用的范围为所在的局部范围,当第一次进去test到结束test时,a已经被销毁。

image-20210405215804527

仔细看上面代码,在局部变量a前面加了static关键字,代码结果发生了变化,static可以修饰局部变量,static修饰局部变量时,改变了他的生命周期(变长),和程序的生命周期一样了

2、static修饰全局变量

改变了这个全局变量的作用域,这个变量只能在自己所在的源文件使用

3、static修饰函数

改变了这个函数的使用范围,这个函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用,static修饰全局变量,使得这个全局变量只能在自己所在的源文件内部使用,
其他源文件不能使用,限制了extern
全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性
但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了

//test.c中的代码
//声明外部函数
extern int Add(int x,int y);
int main()
{
    int a=10;
    int b=20;
    int sum=Add(a,b);
    printf("sum=%d\n",sum);
    return 0;
}
//test.2c中的代码
int Add(int x,int y)
{
    return x+y;
}
    

image-20210405225051860

image-20210405225113714

当加入static时,如下图,会报错,static改变了这个函数的使用范围,这个函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用

image-20210405225204816

欢迎大家讨论学习!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赵小赵福星高照~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值