1.printf的用法
#include <stdio.h>
int main() {
int i = 5;
float f = 96.33;
printf("student number%6.2f\n", f); // 前面的6表示占6个位置 一共两个小数
printf("student number%.2f\n", f);
printf("student number%-6.2f\n", f); // -表示占6个位置并且左对齐
printf("student number%05d\n", i); // 不足5位用0补充
printf("%x", i); // 按8进制输出
printf("%o", i); // 按16进制输出
printf("%s", "Bob\n");
printf("%c", 'c');
return 0;
}
2.scanf
#include <stdio.h>
// scanf 在读取内容时是以字符串形式读取 根据所填的%d等进行转化
int main() {
int i;
// scanf用来读取标准输入即键盘输入
// scanf把标准输入的内容,需要放到某个变量空间,因此变量必须取地址
scanf("%d", &i);
printf("i=%d\n", i);
// 缓冲区中存在输入的i以及\n 因此c直接被写入了\n 而使得程序直接结束
// fflush(stdin); // 清除标准缓冲区可以解决
char c;
scanf("%c", &c);
printf("%c", c);
// 而在读整形数和浮点数时会自动忽略缓冲区存在的\n 空格等
float f;
scanf("%f", f);
printf("%f", f);
return 0;
}
读入多个时的扩展
#include <stdio.h>
int main() {
int i, ret;
float f;
char c;
// ret = scanf("%d%c%f", &i, &c, &f);
// 如果按此类型读入ret会为2 因为c读入了一个空格,导致后面的f匹配不成功 解决方案就是在c之前加一个空格
ret = scanf("%d %c%f", &i, &c, &f); // ret表示scanf成功的个数
printf("i=%d c=%c f=%f\n",i, c, f);
return 0;
}
3.sizeof其实是一个运算符而不是一个函数
4.字符串
在c中无string,因此存字符串用char数组,而数组中需要存结束符,因此数组长度要大于\n
5.strlen、strcat、strcpy、strcmp
strlen: 获取c语言中的字符串c的长度 (判断到结束符)
strlen(c)
strcat:把d中的字符转拼接到c中 c必须是字符数组
strcat(c, d)
strcpy:把c的字符串复制到e中
strcpy(e, c)
strcmp:判断字符串c和e的大小 大于返回正值 等于返回0 小于返回负值
strcmp(e, c)
6.结构体
结构体的最终大小是其最大成员的整数倍 需要对齐的原因:为了CPU的高效的去取内存上的数据
结构体指针
#include <iostream>
using namespace std;
typedef struct student{
int num;
char name[20];
char sex;
}stu, *pstu;
typedef int INGETER; // 为了方便修改类型
int main()
{
stu s = {10, "kkkk", 'c'};
// 定义结构体指针的两种方法
stu* p1 = &s;
pstu p2 = &s;
INGETER num = 10;
printf("num=%d\n", num);
printf("%d\n", p1->num);
return 0;
}
7.c++引用
#include <stdio.h>
void modify_pointer(int *&p, int *q) // 本质上就是二级指针的效果
{
p=q;//
}
int main()
{
int *p = NULL;
int i = 10;
int *q = &i;
modify_pointer(p, q);
printf("%d\n", *p);
return 0;
}