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; }