目录:

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\n", a);//十进制输出 //八进制数
int b = 017;
printf("%d\n", b);//十进制输出
printf("%o\n", b);//八进制输出
printf("%x\n", b);//十六进制输出 //十六进制数
int c = 0xA;
printf("%d\n", c);//十进制输出
printf("%o\n", c);//八进制输出
printf("%x\n", 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\n", sizeof(int));//output: 4 字节Byte 在内存中占的字节数
printf("%lu\n", sizeof(float));//output: 4
printf("%lu\n", sizeof(double));//output: 8
printf("%lu\n", sizeof(long));//output: 8
printf("%lu\n", sizeof(char));//output: 1 return 0;
}

计算机中不能用原码来存储,比如10的原码是0000 1010, 而-10的原码是1000 1010,相加不等于0。

#include <stdio.h>

int main()
{
int a = -15; printf("%x\n", 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\n", a);
printf("%c\n", 65);
putchar(a);
putchar('\n'); //输入字符:
//1.scanf
//2.getchar
char b;
printf("请输入一个字符\n");
scanf("%c", &b);
printf("输入的字符为: %c\n", b);
char c;
c = getchar();
putchar(c);
putchar('\n');

数组基础,数组所占内存,数组个数

 //一维数组
int a[5] = {1, 2, 3, 4, 5}; printf("%p\n", a);
printf("%p\n", &a[0]);
printf("size of a: %d\n", sizeof(a));//数组占用的内存大小,5*4=20
printf("size of a[0]: %d\n", sizeof(a[0]));//数组首元素占用的内存大小,1*4=4
printf("number of array: %d\n", 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\n", 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\t", a[i]);
}
printf("\n");

冒泡排序优化

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\n", buffer); pclose(pp); printf("close pp\n"); 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\n", getpid(), getppid());
sleep(2);
printf("child, i will die, pid=%d, ppid=%d\n", 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\n", pid, getpid(), getppid());
sleep(1);
while (1) {
printf("parent, child_pid=%d, self_pid=%d, father_pid=%d\n", pid, getpid(), getppid());
sleep(1);
}
}
}

最新文章

  1. ubuntu系统下如何修改host
  2. (document).height()与$(window).height()
  3. js删除数据的几种方法
  4. 在Windows宿主机中连接虚拟机中的Docker容器
  5. [Papers]NSE, $u_3$, Lebesgue space [Kukavica-Ziane, Nonlinearity, 2006]
  6. session跨域共享解决方案
  7. jni相关
  8. C/S与B/S
  9. Children’s Queue
  10. Socket编程中 setsockopt的作用
  11. 使用InternetReadFile时要注意读取完整数据
  12. ucenter单点登录
  13. postgresql----JOIN之多表查询
  14. JDK安装教程
  15. Ubuntu 16.04.3 LTS 安装 MongoDB
  16. Jenkins系列之六——拉取指定branch或tag
  17. Luogu P1117 [NOI2016]优秀的拆分
  18. git 注意事项
  19. vs2013在使用ef6时,创建模型向导过程中,四种模型方式缺少2种
  20. 【OS】Heap &amp; Stack

热门文章

  1. Elasticsearch (1) 文档操作
  2. 【源码】Redis Server启动过程
  3. JoJoGAN 实践
  4. AtCoder ABC213 简要题解
  5. Request与Response
  6. Java线程池实现原理及其在美团业务中的实践(转)
  7. ssh中“Host key verification failed.“的解决方案
  8. Swift 学习网址精选 By HL
  9. The official raywenderlich.com Objective-C style guide.
  10. Jenkins敏捷开发 自动化构建工具