小甲鱼C语言1-22讲笔记(指针和数组)


目录

课程安排

1、常量

2、标识符

3、数据类型

1、基本类型

2、指针类型

3、构造类型

4、空类型

4、取值范围

5、字符和字符串

6、算数运算符

7、关系运算符和逻辑运算符

8、if语句

9、switch语句

指针和指针变量


课程安排

第一季:C语言语法

第二季:C语言在linux下的应用

第三季:利用Arduino进行开发

1、常量

定义符号常量

 #define BOSS "小甲鱼"

将程序中所有的BOSS替换成小甲鱼

字符串常量,在输出的时候会自动追加一个\0表示编译结束,所以字符串长度一般比输入的多一位

2、标识符

标识符只能是英文字母(A-Z,a-z)和数字(0-9)或者下划线组成

第一个字符必须是字母或者下划线开头

标识符区分大小写

不能使用关键字来命名标识符

3、数据类型

1、基本类型

整数类型

 short int
 int 
 long int
 long long int

长度依次递减

浮点数类型

 float
 double
 long double

字符类型

 char

布尔类型

 _Bool

枚举类型

 enum

sizeof 运算符用于获得数据类型或表达式的长度

 sizeof(object);//对象
 sizeof(type-name);//类型
 sizeof object;//对象

signed可以存放负数

unsigned不可以存放负数

2、指针类型

3、构造类型

数组类型

结构类型

联合类型

4、空类型

4、取值范围

符号位:存放signed类型的存储单元中,左边第一位表示符号位。如果该位为0,表示该整数为正数,如果该位为1,表示该整数是一个负数

无符号的不能用%d 需要用%u

char最大值127位

最小值-128位

 

5、字符和字符串

 #include<stdio.h>
 int main()
 {
     char a='c';
     printf("%c=%d\n",a,a);//ASCLL表
     return 0;
 }

输出结果为a=67

 #include<stdio.h>
 int main()
 {
 char a=70,b=105,c=115,d=104,e=67;
     printf("%c%c%c%c\n",a,b,c,d,e);
     return 0;
 }

输出结果为fishc

 include<stdio.h>
 int main()
 {
     unsigned char height;//用unsigned进行限制,确保取值范围是                           0-255
     height=170;
     printf("小甲鱼的身高是%d厘米",height);
         return 0;
 }

定义字符串:

 #include<stdio.h>
 int main()
 {
 ​
 char name[5]={'F','i','s','h','c'};
     printf("%s\n",name);
     printf("Hello\n");
     return 0;
 }  

这样输出的结果是乱码,原因是计算机不知道如何停下,为了确定字符在内存里的结束位置,C语言规定在结尾加一个\0 该代码块没有\0的位置,因此可以修改如下

 #include<stdio.h>
 int main()
 {
 ​
 char name[6]={'F','i','s','h','c','\0'};
     printf("%s\n",name);
     printf("Hello\n");
     return 0;
 }  

就是再加一个\0的位置

或者不用中括号里面的数字也可以

 #include<stdio.h>
 int main()
 {
 ​
 char name[]={'F','i','s','h','c','\0'};
     printf("%s\n",name);
     printf("Hello\n");
     return 0;
 }  

或者在大括号里定义字符串常量,用双引号进行定义

 #include<stdio.h>
 int main()
 {
 ​
 char name[]={"FISHC"};
     printf("%s\n",a);
     printf("Hello\n");
     return 0;
 }  

6、算数运算符

 #include<stdio.h>
 #include<math.h>
 int main()
 {
     inti,j,k;
     i=1+2;
     j=1+2*3;
     k=i+j+-1+pow(2,3);
     
     printf("i=%d\n",i);
     printf("j=%d\n",j);
     printf("k=%d\n",k);
     return 0;
 }

7、关系运算符和逻辑运算符

==(等于)

!=(不等于)

 #include<stdio.h>
 int main()
 {
     int a=5,b=3;
     
     printf("%d\n",1<2);
     printf("%d\n",a>b);
     printf("%d\n",a<=b+1);
     printf("%d\n",'a'+'b'<='c');
     printf("%d\n",(a=3)>(b=5));
     
     return 0;
 }

输出结果: 1 1 0 0 0

!逻辑非

&&逻辑与

||逻辑或

逻辑表达式中,任何非零的数表示真,0表示假

短路求值:又称最小化求职,是一种逻辑运算符的求值策略,只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值

C语言对逻辑与和逻辑或采用短路求值的方法

 #include<stdio.h>
 int main()
 {
     int a=3,b=3;
     (a=0)&&(b=5);
     printf("a=%d,b=%d\n",a,b);
     (a=1)||(b=5);
     printf("a=%d,b=%d\n",a,b);
     return 0;
 }

输出结果为 a=0,b=3

a=1,b=3

两个结果都是一旦判断a为真或者假之后 就可以不用管b的赋值情况了,所以b的值仍然是原来的3

8、if语句

 #include<stdio.h>
 int main()
 {
     int i;
     printf("您老贵庚啊:");
     scanf("%d",&i);
     if(i>=18)
     {
         printf("进门左拐!\n");
     }
     else
     {
         printf("慢走,不送!\n");
     }
     return 0;
 }
 #include<stdio.h>
 int main()
 {
     int i;
     printf("请输入分数:");
     scanf("%d",&i);
     if(i>=90)
     {
         printf("A\n");
     }
     else if(i>=80&&i<90)
     {
         printf("B\n");
     }
     else if(i>=70&&i<80)
     {
         printf("C\n");
     }
     else if(i>=60&&i<70)
     {
         printf("D\n");
     }
     else
     {
         printf("E\n");
     }
     return 0;
 }

9、switch语句

 #include<stdio.h>
 int main()
 {
     char ch;
     printf("请输入你的成绩:");
     scanf("%c",&ch);
     
     switch (ch)
     {
     case'A' :printf("你的成绩在90分以上!\n");break;
     case'B':printf("你的成绩在80~90分之间!\n");break;
     case'C':printf("你的成绩在70~80分之间!\n");break;
     case'D':printf("你的成绩在60~70分之间!\n");break;
     case'E':printf("你的成绩在60分以下!\n");break;
     default:printf("请输入有效的成绩");break;
     }
     return 0;
 }

else 悬挂

 #include<stdio.h>
 int main()
 {
     char israin,isfree;
     printf("是否有空?(Y/N)");
     scanf("%c",&isfree);
     
     getchar()//可以过滤回车
     printf("是否下雨?(Y/N)");
     scanf("%c",&israin);
     if(isfree=='Y')
     {
         if(israin=='Y')
             printf("记得带伞噢\n");
      }
     else{
         printf("女神没空\n");
     }
     return 0;
 }

等于号问题

 #include<stdio.h>
 int main()
 {
     char hasBF;
     printf("小花你有男朋友吗?(Y/N)");
     scanf("%c",&hasBF);
     if(hasBF=='Y')//这里如果是一个=,就会导致无法出现第二种情况
     {
         printf("那祝你们幸福咯!\n");
     }
     else
     {
         printf("那我们在一起吧!\n");
     }
     return 0;
 }

13 while语句和dowhile语句

循环结构

whlie(表达式)

循环体

 #include<stdio.h>
 int main()
 {
     int i=1,sum=0;
     while(i<=100)
     {
         sum=sum+i;
         i=i+1;
     }
     printf("输出的结果是:%d",sum);
 }

输出结果是5050

指针和指针变量

类型名*指针变量名

char*pa;//定义一个指向字符型的指针变量

int *pb;//定义一个指向整型的指针变量

取地址运算符和取值运算符

如果需要获取某个变量的地址,可以使用取地址运算符(&)

char*pa=&a;

int *pb=&f;

如果需要访问指针变量指向的数据,可以使用取值运算符(*)

printf("%c,%d\n",pa,pb);

 #include<stdio.h>
 int main()
 {
     char a='F';
     int f=123;
     char*pa=&a;
     char*pb=&f;
     printf("a=%c\n",*pa);
     printf("f=%d\n",*pb);
     return 0;
 }

避免访问未初始化的指针

例如

 #include<stdio.h>
 int main()
 {
     int*a;
     a=123;
     return 0;
 }

指针和数组

 #include<stdio.h>
 int main()
 {
     int a;
     int *p=&a;
     printf("请输入一个整数:");
     scanf("%d",&a);
     printf("a=%d\n",a);
     printf("请重新输入一个整数:");
     scanf("%d",p);
     printf("a=%d\n",a);
     return 0;
 }

指向数组的指针

如果用一个指针指向数组,应该怎么做呢

char*p;

p=a;//语句1

p=&a[0];//语句2

 #include<stdio.h>
 int main()
 {
     char a[]="FishC";
     int b[5]={1,2,3,4,5};
     float c[5]={1.1,2.2,3.3,4.4,5.5};
     double d[5]={1.1,2.2,3.3,4.4,5.5};
   int*p=b;
     printf("*p=%d,*(p+1)=%d,*(p+2)=%d\n",*p,*(p+1),*(p+2));
     return 0;
 }

指针的运算

当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于指向指针所在位置向前或向后的第n个元素

对比标准的下标法访问数组元素,这种使用指针进行间接访问是的方法叫做指针法

p+1不是简单的江地址+1,而是指向数组的下一个元素

 #include<stdio.h>
 int main()
 {
     char str[128];
     printf("请输入鱼C的域名:");
     scanf("%s",str);
     printf("鱼C工作室的域名是:%s\n",str);
     return 0;
 }

由上述代码可知,数组名就是一个地址信息

数组名其实是数组第一个元素的地址

 #include<stdio.h>
 int main()
 {
     char str[128];
     printf("请输入鱼C的域名:");
     scanf("%s",str);
     printf("str的地址是:%p\n",str);
     printf("str的地址是:%p\n",&str[0]);
      //printf("鱼C工作室的域名是:%s\n",str);
     return 0;
 }

结果如下

str的地址是:00000030b89ff970 str的地址是:00000030b89ff970

 #include<stdio.h>
 int main()
 {
     char a[]="FishC";
     int b[5]={1,2,3,4,5};
     float c[5]={1.1,2.2,3.3,4.4,5.5};
     double d[5]={1.1,2.2,3.3,4.4,5.5};
     printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
     printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
     printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);
     printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);
     return 0;
 }

结果如下

a[0]->0000009a5e5ff7da,a[1]->0000009a5e5ff7db,a[2]->0000009a5e5ff7dc b[0]->0000009a5e5ff7e0,b[1]->0000009a5e5ff7e4,b[2]->0000009a5e5ff7e8 c[0]->0000009a5e5ff800,c[1]->0000009a5e5ff804,c[2]->0000009a5e5ff808 d[0]->0000009a5e5ff820,d[1]->0000009a5e5ff828,d[2]->0000009a5e5ff830



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

觉行悟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值