helloworld
#include<stdio.h>
int main()
{
/*在双引号中间输入Hello World*/
printf("Hello World");
return 0;
}
单行注释: `//注释一行`
多行注释: `/* 注释内容 */`
数据
数据类型
存储类别:
- 自动(auto)
auto int b,c;
“自动存储类别 - 静态(static)
static int i = 0;
运行期间都不释放 - 寄存器的(register)
register int i;
寄存器变量 - 外部的(extern)
本文件extern int i; 外部文件int i=42;
其他地方定义的变量
数组
1. 数据类型 数组名称[长度n] = {元素1,元素2…元素n};
2. 数据类型 数组名称[] = {元素1,元素2…元素n};
3. 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n-1] = 元素n;
字符串
1. char 字符串名称[长度] = “字符串值”;
2. char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};
printf("输出格式符",输出项)
;
枚举
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;
day = WED;
printf("%d",day);
后续枚举成员的值在前一个成员上加 1;
结构体
不同变量的集合,内存连续
struct Pair{
int a;
float b;
};
struct Pair p = {1, 2.0};
printf("%d,%f\n", p.a, p.b);
共用体
成员有且只能有一个占用内存空间。
union Data {
int i;
float f;
char str[20];
} data;
运算符
三目运算符:表达式1 ? 表达式2 : 表达式3;
先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。
优先级
控制语句
if-else语句
if(表达式){执行语句;}
else if(表达式){执行语句;}
else{执行语句;}
while
while(表达式){执行语句;}
do-while
do{执行语句;}while(表达式);//有分号
for
for(表达式1;表达式2;表达式3){执行语句;}
switch
switch(表达式){
case 常量表达式1:执行语句;break;
case 常量表达式2:执行语句;break;
case 常量表达式n:执行语句;break;
default: 执行代码n+1;
如果没有break
语句,执行流程将继续执行下一个case
标签处的代码块,直到遇到break
语句或者switch
语句的结束,或者执行流程到达了其他的case
标签。
goto
LOOP: i=0;
goto LOOP;
结束语句
break;
continue;
return 0;
函数
[数据类型] 函数名 ([参数])
{
代码;
return (表达式);
}
递归函数
函数体内调用它自身。递归函数必须有结束条件。
关键字
define
#define PI 3.14159
float c(float r){
return 2.0 * PI * r;
}
typedef
typedef int interger;
typedef enum {Apple, Banana} Fruit;
typedef struct { int a; float b; } Pair;
void main(){
interger i = 1;
Fruit fruit = Apple;
Pair p = {1, 2.0};
}
指针
//变量
int v = 1;
int *vp = &v;
*vp += 1; // v 变成了 2
//数组
int i[3] = {1, 2, 3};
int *p = i; // 或 int *p = &i[0];
*(p+2) = 4; // 相当于 i[2] = 4;
printf("%d\n", *(p+2)); // 相当于打印 i[2]
//二维数组
int arr[2][3] = {{1,2,3}, {4,5,6}};
int *p = arr[0];
*(p + (3 * 1) + 2) = 7; // 相当于 arr[1][2] = 7;
printf("%d\n", arr[1][2]);
//指向指针的指针
int v = 1;
int *pv = &v;
int **pp = &pv;
(**pp)++;
//指向函数的指针
int add(int a, int b){
return a + b;
}
int sub(int a, int b){
return a - b;
}
int main(int argc, const char * argv[]) {
int (*op)(int, int) = &add;
printf("%i\n", (*op)(3, 1));
op = ⊂
printf("%i\n", (*op)(3, 1));
return 0;
}
//堆内存
int *p = (int *) malloc(8); //获取内存,返回 `void *` 类型的指针。
p[0]=0; // 这样写也可以哦,和 *(p+0) 的是一样的
p[1]=1;
printf("%d\n", p[1]); // 1
p = realloc(p, 12); //重新指定内存的大小
p[2] = 2;
printf("%d\n", p[2]); // 2
free(p); //释放内存(全部回收)
标准库
读写文本文件
#include <stdio.h>
#define MAX 10000
void main() {
FILE *s = fopen("a.txt", "r");
FILE *t = fopen("b.txt", "a");
char c[MAX] = "";
char *e;
while((e = fgets(c, MAX, s)) != 0){
fputs(c, t);
printf("%s", c);
}
fclose(s);
fclose(t);
}
字符串操作
#include <stdio.h>
#include <string.h>
#define MAX 1000
void main() {
char s[MAX] = "hello world";
char t[MAX] = "";
int len = strlen(s); // len is 11
char *pl = strchr(s, 'l'); // (pl-s) is 2
strcpy(t, s); // t is "hello world"
strcat(t, s); // t is "hello worldhello world"
}