一、Hello World
#include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! "); return 0; }
一个标准的hello.c文件,然后gcc hello.c -o hello,生成hello.exe(linux下生成hello.out文件),然后直接运行这个文件,屏幕输出:Hello World!
二、变量声明之extern关键字
个人理解,extern关键字用于引入外部变量,在函数作用域内调用全局变量。这一点在js中是可以直接调用的,而在python中是通过global关键字调用全局变量。
#include <stdio.h> //外部变量(全局作用域) int x; int y; int addtwonum() { //函数作用域引入全局变量 extern int x; extern int y; //给全局变量x 和 y 赋值 x = 1; y = 2; return x+y; } int main() { int result; // 调用函数 addtwonum result = addtwonum(); printf("result 为: %d",result); return 0; }
在不同文件之间进行变量的调用也是通过该关键字的:
#include <stdio.h> /*外部变量声明*/ extern int x ; extern int y ; int addtwonum() { return x+y; }
#include <stdio.h> /*定义两个全局变量*/ int x=1; int y=2; int addtwonum(); int main(void) { int result; result = addtwonum(); printf("result 为: %d ",result); return 0; }
三、变量和常量的定义
#include <stdio.h> int main() { const int LENGTH = 10; //常量 #define WIDTH 5; //常量 int area; //变量 area = LENGTH * WIDTH; printf("value of area : %d", area); return 0; }
其实这块遇到了一些问题 invalid type argument of unary '*' (have 'int') 在连乘的时候,百度了一下,应该看到后面指针的时候就能解决这个疑问。
四、函数
#include <stdio.h> /* 函数声明 */ int max(int num1, int num2); int main () { /* 局部变量定义 */ int a = 100; int b = 200; int ret; /* 调用函数来获取最大值 */ ret = max(a, b); printf( "Max value is : %d ", ret ); return 0; } /* 函数返回两个数中较大的那个数 */ int max(int num1, int num2) { /* 局部变量声明 */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
C语言中,要想在主程序里调用函数,必须事先对函数进行声明,无论是在全局声明还是局部声明,只有声明了才能用,所以上述的函数声明至关重要。
五、枚举
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
注意,枚举的第一个值默认是0,如果没有对其赋值的话,上述只是定义了一个枚举类型DAY;
//先定义枚举类,再定义枚举变量 enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; //定义枚举类的同时定义枚举变量 enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; //省略枚举类名,直接定义枚举变量 enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
#include<stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; int main() { enum DAY day; day = WED; printf("%d",day); return 0; }
枚举类是被当做int处理的,所以上述输出3。
六、指针
首先&符号可以访问变量在内存中的地址。
#include <stdio.h> int main () { int var = 20; /* 实际变量的声明 */ int *ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 var 的地址 */ printf("Address of var variable: %p ", &var ); /* 在指针变量中存储的地址 */ printf("Address stored in ip variable: %p ", ip ); /* 使用指针访问值 */ printf("Value of *ip variable: %d ", *ip ); return 0; }
函数指针:
#include <stdlib.h> #include <stdio.h> // 回调函数 void populate_array(int *array, size_t arraySize, int (*getNextValue)(void)) { for (size_t i=0; i<arraySize; i++) array[i] = getNextValue(); } // 获取随机值 int getNextRandomValue(void) { return rand(); } int main(void) { int myarray[10]; populate_array(myarray, 10, getNextRandomValue); for(int i = 0; i < 10; i++) { printf("%d ", myarray[i]); } printf(" "); return 0; }
七、字符串
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '