初识指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
1.%p是用来打印地址的。在32位中是由32个比特位的2进制序列组成的地址,所以就可以表示2的32次方个地址/储存单元,
一个储存单元等于一字节(即1Byte)
2.int a=0;//a在内存中要分配空间---4个字节
int*pa=&a//把a的地址给到pa,&a拿出来的是a所占4个字节的第一个字节的地址
pa是用来存放地址的,叫做指针变量,*说明pa是指针变量,int说明pa指向的对象是int类型的
例子:char c=‘w’;
char*pc=&c;
*pc;//*叫做解引用操作*pc就是通过pc里的地址找到c
可以用sizeof求出指针变量的大小,在32位里为4字节;在64位里为8字节
初识结构体
结构体可以创建出新的类型
比如创建一个学生类型
struct stu
{
char name[20];
int age;
double score;
};
用这个类型即可创建一个学生
int main()
{
struct stu s={"张华",18,100};//结构体的创建和初始化
printf("1:%s %d %lf\n",s.name,s.age,s.score);//打印结构体变量,这里的“.”操作符可以理解为“的”。
struct stu * ps=&s;
printf("2:%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score);//用指针变量来打印
printf("3:%s %d %lf\n",ps->name,ps->age,ps->score);//"->"操作符:“结构体指针->成员变量名”
}
分支语句ifelse
if()括号里面写条件即满足什么条件是执行if下的程序
()里面如果是几个条件中间要加上&&或者||等逻辑运算符
if(a>=0&&a<=18)
{
}
{}内只有一条语句时“{}”可以省略,有多条语句时不可以省略。
if()
else if()
else if()
else//这样就可以分成好多种情况最后再用else
悬空else
当写了这个代码
#include<stdio.h>
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("张华\n");
else
printf("国\n");
return 0;
}
这段代码打印不出东西。因为else和离它最近的if匹配所以必须第一个if为真才有它的事。
不是谁和它对齐就和谁匹配
这里就体现了{}的重要性,如果加上{}可以更好的看出(/控制)匹配关系
小tip:在if后面判断时(5==z)可以把常量放在左边这样如果少一个=就会报错可以提醒自己
分支语句switch
switch语句也是一种分支语句,常用于多分支的情况
比如
输入1 | 周一 |
输入2 | 周二 |
输入3 | 周三 |
输入4 | 周四 |
输入5 | 周五 |
输入6 | 周六 |
输入7 | 周天 |
这如果用if,else很麻烦,就需要用到switch语句了
switch(整型表达式){语句项}
int a=0;这里的a就是整型表达式
下面完成上述例子直观感受一下
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
printf("周一");
break;
case 2:
printf("周二");
break;
case 3:
printf("周三");
break;
case 4:
printf("周四");
break;
case 5:
printf("周五");
break;
case 6:
printf("周六");
break;
case 7:
printf("周天");
break;
}
return 0;
}
说明:case相当于一个入口,我们输入的几会走到case几里面,break相当于一个出口,如果没有break的话它就会一直走下去
case后必须是整形常量表达式
如果输入的值case中没有,我们可以加一条default语句,当输入的值不匹配任何case语句时,default语句就会被执行,default语句可以放在switch中的任何位置但一般放在最后。
循环语句
包含三个{while,for,do while}
while循环
语法结构:while(表达式)
循环语句;————可能不是一条语句
注:表达式结果为真循环语句执行,否则不执行。在while前要先对循环变量进行初始化z
在while循环中break用于永久终止循环
在while循环中continue的作用是跳过本次循环continue后面的代码,直接去判断部分看是否进行下一次的循环
EOF=end of file即结束
getchar()可以读取一个字符当遇到错误时就会是EOF
输入字符数组不用&例如
char ch[20]={0};
scanf("s",ch);
这里ch前就不用&符号,因为字符数组的数组名本身就是一个地址
for循环
for(表达式1;表达式2;表达式3)
循环语句;
表达式1:初始化 表达式2:判断 表达式3:调整
流程图
break和continue在for循环中的出现
break与while相同continue略有不同
在for循环中continue跳过后会进入调整部分而while循环中完全有可能跳过调整部分导致出现死循环
举个例子
int main()
{
int i = 0;
while (i <= 10)
{
if (5 == i)
continue;
printf("%d\n", i);
i++;
}
return 0;
}
这里continue后的i++不会执行导致只能输出1234
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
{
continue;
}
printf("%d\n", i);
}
return 0;
}
这里的continue就不会陷入死循环,i=5之后会进入调整环节,所以可以输出1234678910
for循环的三个部分均可以省略不过判断部分省略的话就恒为真会死循环
do...while循环
do
循环语句;
while(表达式);
与while的区别,这个是先执行再判断,while是先判断再执行
流程图
刷题记录