define定义常量和宏
#define ADD(X,Y) X+Y
#include <stdio.h>
int main() {
printf("%d", 4 * ADD(2, 3));
return 0;
}
结果为11而不是20,定义宏是替换
指针
指针变量存放地址
关于何时加*的问题:在定义指针变量时需要加以及作为函数参数时需要加
printf(" %d\n", *pa);这里我输出的时这个指针所指内存中存储的数据的值
printf(" %d\n", pa);这里则输出的是这个指针所指的地址
p=&a;将指针的地址指向a的地址
*p=a,将a的值赋给p指针所指内存中存储的值
结构体
描述复杂对象
struct Stu
{
char name[20];
int age;
double score;
};
int main() {
struct Stu s = { "张三",20,90.5 };
printf("%s %d %.2f\n", s.name, s.age, s.score);
struct Stu* ps = &s;
printf("%s %d %.2f\n", ps->name, ps->age, ps->score);
return 0;
分支结构
if else 语句
悬空的else会和最近的if匹配
顺序输出1-100的奇数:
#include <stdio.h>
int main() {
for (int i = 1; i <= 100; i++) {
if (1==i%2)
{
printf("%d\n", i);
}
}
return 0;
}
switch语句
选择条件必须是整型(包含字符)
case后必须是常量
default用于处理case包含情况之外的情况
break语句用于跳出switch语句,否则顺序执行
循环结构
while循环
break用于跳出循环
continue直接跳过本次循环里continue后面的代码重新进入循环
getchar()返回值是int(有可能返回EOF)
EOF:文件结束标志(值为-1)
putchar()
清理缓冲区
#include<stdio.h>
int main() {
printf("请输入密码:");
char password[20] = {0};
scanf("%s", password);
int temp;
while ((temp = getchar()) != '\n') {
;
}
int ch = getchar();
if ('Y' == ch) {
printf("正确");
}
else {
printf("错误");
}
return 0;
}