1.宏定義
<1>.常量定義
#define MATH_PI 3.14
void defineH() {
// 宏在編譯階段就把宏對應的常量給替換了,所以很快;
printf("%f", MATH_PI);
}
<2>.方法定義
// 定義宏方法,宏方法沒有具體的返回類型;當多行的時候,在後面添加一個反斜槓;
#define MAX(A,B) {\
A>B?A:B \
}
調用:MAX(12,30);
2.結構體
<1>.結構體定義
struct People {
int age;
char *name;
};
使用:
struct People p;
p.age = 12;
printf("%d", p.age);
<2>.結構體指針
/**
* 需要引入stdlib.h
*/
void structpointer() {
// 聲明一個People指針(需要初始化)並且分配一個內存地址,內存大小為結構體People的大小
struct People *p = malloc(sizeof(struct People));
p->age = 20;
p->name = "ls";
struct People *p1 = p;
p1->name = "ls1";
printf("hello struct People %s", p->name); // 輸出結果為ls1
// 使用malloc分配的指針在不需要使用之後需要釋放
free(p);
}
3.函數指針
/**
* 函數指針
*/
void functionpointer(int i) {
printf("hello functionpointer %d \n", i);
}
int functionpointer1() {
printf("hello functionpointer1 \n");
return 0;
}
void functionpointerexe() {
void (*p)(int);
p = functionpointer;
p(34);
int (*a)();
a = functionpointer1;
a();
}
4.typedef關鍵字
<1>.定義結構體
typedef struct {
int age;
} P1;
通過typedef定義之後,在申明P1 struct的時候就不再需要在前面加struct關鍵字了;
P1 p;
p.age = 12;
printf("%d", p.age);
<2>.定義函數指針
typedef int (*Void)();
Void v = functionpointer1; v(); // 輸出functionpointer1
5.引入自定義頭文件
hello.h
// 如果沒有定義HELLO_H_,則定義HELLO_H_,是為了防止頭文件重復; #ifndef HELLO_H_ #define HELLO_H_ void sayHello(); #endif /* HELLO_H_ */
hello.c
#include <stdio.h>
// hello.h中sayHello具體實現
void sayHello() {
printf("hello c");
}
main.c
#include "hello.h"
int main(int argc, const char * argv[]) {
sayHello();
}
6.文件操作
read:
void fileRead1() {
FILE * f = fopen("xx.txt", "r");
fseek(f, 0, SEEK_END); // seek到文件末尾:獲取文件大小
long size = ftell(f); // 返回文件大小
char buf[size + 1];
fseek(f, 0, SEEK_SET); // 重新回到文件開始
fread(buf, sizeof(unsigned char), size, f);
buf[size] = '\0';
fclose(f);
printf("%s", buf);
}
write:
void fileWrite1() {
// f可能為空,需要進行判斷!
FILE * f = fopen("xx.txt", "w");
fprintf(f, "hello c");
fclose(f);
}
7.其他
<1>.生成隨機數:
srand((int) time(NULL ));
int randNum = rand();
printf("%d,", randNum);
return 0;
<2>.字符串操作:
char buf[100];
memset(buf, 0, 100); //
sprintf(buf, "hello c %d s%f,", 12, 23.2);
printf("%s", buf);
<3>.輸入輸出:
void getput() {
char buf[100];
gets(buf); // 等待用戶輸入
puts(buf);
}
int scanprint() {
int a;
scanf("%d", &a);
printf("%d", a);
return 0;
}