目录:
1.编译基础
2.c语言关键字
3.c语言数据类型
4.二进制/8进制/16进制
5.计算机内存数值存储方式:sizeof/原码/反码/补码
6.c语言中的字符和字符串
7.c语言中的数组和字符串(字符数组和字符串)
7.1 数组的逆置,冒泡排序(含优化)
编译基础:
C代码编译成可执行程序经过4步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去
进制打印:
#include <stdio.h> int main() { //十进制数 int a = 10; printf("%d ", a);//十进制输出 //八进制数 int b = 017; printf("%d ", b);//十进制输出 printf("%o ", b);//八进制输出 printf("%x ", b);//十六进制输出 //十六进制数 int c = 0xA; printf("%d ", c);//十进制输出 printf("%o ", c);//八进制输出 printf("%x ", c);//十六进制输出 return 0; }
计算机内存数值存储方式
当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
整数的原码、反码、补码相同。
#include <stdio.h> int main() { /* %d 有符号10进制整数(%ld 长整型,%hd短整型 ) %hu 无符号短整形(%u无符号整形,%lu无符号长整形) %i 有符号10进制整数 (%i 和%d 没有区别,%i 是老式写法,都是整型格式) %o 无符号8进制整数 %u 无符号10进制整数 %x 无符号的16进制数字,并以小写abcdef表示 %X 无符号的16进制数字,并以大写ABCDEF表示 %f 输入输出为浮点型 (%lf双精度浮点型) %E/e 用科学表示格式的浮点数 %c 输入输出为单个字符 %s 输入输出为字符串 * */ printf("%lu ", sizeof(int));//output: 4 字节Byte 在内存中占的字节数 printf("%lu ", sizeof(float));//output: 4 printf("%lu ", sizeof(double));//output: 8 printf("%lu ", sizeof(long));//output: 8 printf("%lu ", sizeof(char));//output: 1 return 0; }
计算机中不能用原码来存储,比如10的原码是0000 1010, 而-10的原码是1000 1010,相加不等于0。
#include <stdio.h> int main() { int a = -15; printf("%x ", a); //结果为 fffffff1 //fffffff1对应的二进制:1111 1111 1111 1111 1111 1111 1111 0001 //符号位不变,其它取反:1000 0000 0000 0000 0000 0000 0000 1110 //上面加1:1000 0000 0000 0000 0000 0000 0000 1111 最高位1代表负数,就是-15 return 0; }
字符的输入和输出:
//输出字符: //1. printf //2. putchar char a = 'A'; printf("%c ", a); printf("%c ", 65); putchar(a); putchar(' '); //输入字符: //1.scanf //2.getchar char b; printf("请输入一个字符 "); scanf("%c", &b); printf("输入的字符为: %c ", b); char c; c = getchar(); putchar(c); putchar(' ');
数组基础,数组所占内存,数组个数
//一维数组 int a[5] = {1, 2, 3, 4, 5}; printf("%p ", a); printf("%p ", &a[0]); printf("size of a: %d ", sizeof(a));//数组占用的内存大小,5*4=20 printf("size of a[0]: %d ", sizeof(a[0]));//数组首元素占用的内存大小,1*4=4 printf("number of array: %d ", sizeof(a) / sizeof(a[0]));//数组中有多少元素
一维数组逆置,冒泡排序
//reverse array int a[54] = {1, 2, 3, 4, 5}; int left = 0; int right = sizeof(a) / sizeof(a[0]) - 1; while (right > left) { int temp; temp = a[left]; a[left] = a[right]; a[right] = temp; left++; right--; } for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) { printf("%d ", a[i]); }
冒泡排序
//bubble sort int a[7] = {13, 4, 1, 6, 2, 3, 5}; int length = sizeof(a) / sizeof(a[0]); int temp = 0; for (int i = 0; i < length - 1; ++i) { for (int j = 0; j < length - i - 1; ++j) { if (a[j] > a[j + 1]) { //swap element temp = a[j + 1]; a[j + 1] = a[j]; a[j] = temp; } } } for (int i = 0; i < length; ++i) { printf("%d ", a[i]); } printf(" ");
冒泡排序优化
123
测试popen子进程挂掉的代码:
#include <stdio.h> #include <assert.h> #include <unistd.h> int cmd_to_vector(const char *cmd) { //vc.clear(); FILE *pp = NULL; pp = popen(cmd, "r");//TODO char buffer[400] = {0}; assert(pp != NULL); fread(buffer, 1, sizeof(buffer), pp); printf("buffer: %s ", buffer); pclose(pp); printf("close pp "); return 0; } int main(){ // char* command1 = "ps -aux | grep media-agent | grep -v grep | awk '{print $3, $4}'"; // char* command2 = "ps -aux | grep web-service | grep -v grep | awk '{print $3, $4}'"; // char* command3 = "ps -aux | grep video-face-system | grep -v grep | awk '{print $3, $4}'"; // char* command4 = "ps -aux | grep media-record | grep -v grep | awk '{print $3, $4}'"; // char* command5 = "ps -aux | grep peripheral-manager | grep -v grep | awk '{print $3, $4}'"; // // while (1) { // cmd_to_vector(command1); // cmd_to_vector(command2); // cmd_to_vector(command3); // cmd_to_vector(command4); // cmd_to_vector(command5); // sleep(1); // } pid_t pid = fork(); if (pid == 0) { printf("child, pid=%d, ppid=%d ", getpid(), getppid()); sleep(2); printf("child, i will die, pid=%d, ppid=%d ", getpid(), getppid()); int a = 1; int b = 0; assert(a / b); } else if (pid > 0) { printf("parent, child_pid=%d, self_pid=%d, father_pid=%d ", pid, getpid(), getppid()); sleep(1); while (1) { printf("parent, child_pid=%d, self_pid=%d, father_pid=%d ", pid, getpid(), getppid()); sleep(1); } } }