目录:

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

01_c语言再学习_基础部分(1)的更多相关文章

  1. C语言再学习part1-宏观认识C语言

    天下莫柔弱于水,而攻坚强者莫之能胜,以其无以易之也.弱之胜强,柔之胜刚,天下莫不知行,莫能行. —老子 我近来每天都在坚持读书,所以我一直沉浸于古人的智慧中无法自拔.所以如果我这篇博文被你有幸看到,那 ...

  2. C语言再学习part3—算法

    君子远庖厨,万物皆备于我.—孟子 这篇文章主要总结程序的主要要素,以及程序的构成是什么样子的.最后说说我学到的一种奇特的表示算法的方式—伪代码. 让我们开始吧! 一个程序应该包括以下两个主要要素: 1 ...

  3. C语言再学习之内存对齐

    昨天看Q3的代码,看到有个_INTSAIZEOF的宏,着实晕了一阵.一番google后,终于明白,这个宏的作用是求出变量占用内存空间的大小,先看看_INTSAIZEOF的定义吧: #define _I ...

  4. C语言再学习part2-重新认识C语言词汇

    迷阳迷阳,无伤吾行.无行郗曲,无伤吾足.—庄子 C语言词汇: 标识符 在程序中的变量名.函数名.标号等等成为标识符.其中标识符相在C中只能是字母A~Z,a~z,数字0~9,下划线(_)组成的字符串,并 ...

  5. C语言再学习之 setjmp与longjmp

    前不久在阅读Quake3源代码的时候,看到一个陌生的函数:setjmp,一番google和查询后,觉得有必要针对setjmp和longjmp这对函数写一篇blog,总结一下. setjmp和longj ...

  6. 吴裕雄--天生自然 R语言开发学习:基础知识

    1.基础数据结构 1.1 向量 # 创建向量a a <- c(1,2,3) print(a) 1.2 矩阵 #创建矩阵 mymat <- matrix(c(1:10), nrow=2, n ...

  7. 01_Linux学习_基础知识

    学Linux就学命令行 === cd / 转到根目录,相对当前路径 cd dev 转到dev目录 whoami 查阅当前用户 pwd 查阅当前目录 ls 查阅当前目录下的目录和文件 === Linux ...

  8. CSS 再学习,基础篇

    语法 h1 {color:red; font-size:14px;} 共享声明 h1,h2,h3,h4,h5,h6 { color: green; } 继承 通过 CSS 继承,子元素将继承最高级元素 ...

  9. MQTT再学习 -- MQTT 客户端源码分析

    MQTT 源码分析,搜索了一下发现网络上讲的很少,多是逍遥子的那几篇. 参看:逍遥子_mosquitto源码分析系列 参看:MQTT libmosquitto源码分析 参看:Mosquitto学习笔记 ...

随机推荐

  1. Linux查看CPU历史负载

    sar -f /var/log/sa/sa20 -s 02:00:00 -e 06:00:00 | head -n 50 sysstat工具与负载历史回放 很多系统负载过高的时候我们是无法立即获知或者 ...

  2. python网络爬虫-解析网页(六)

    解析网页 主要使用到3种方法提取网页中的数据,分别是正则表达式.beautifulsoup和lxml. 使用正则表达式解析网页 正则表达式是对字符串操作的逻辑公式 .代替任意字符 . *匹配前0个或多 ...

  3. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...

  4. 有向图子图 DAG 数量

    考虑 \(\tt DP\),朴素的想法是令 \(f_S\) 表示 \(S\) 这个导出子图将边定向集合构成 \(\tt DAG\) 的方案数. 转移可以考虑剥去所有入度为 \(0\) 的点,那么我们就 ...

  5. 电脑预装Office2016打开Word时点击保存弹出“word无法启动转换器RECOVR32.CNV”对话框问题的修复方法

    感谢大佬:https://blog.csdn.net/qq_41969790/article/details/85161701 1.问题描述:电脑预装的Office2016,家庭和学生版正版.每次打开 ...

  6. iOS 即使通讯第三方SDK 资料

    第三方即时通讯SDK,下面是一些主流的第三方的即时通讯SDK,尽管不能查看里面的源代码,但通过查看头文件,能为实现自己的即使通讯SDK提供很好的思路.(备用) 容云 容联.云通讯 IMSDK - 轻松 ...

  7. linux_18

    简述keepalived工作原理 编译安装haproxy 总结haproxy各调度算法的实现方式及其应用场景 使用haproxy的ACL实现基于文件后缀名的动静分离

  8. 深度学习:多层感知机和异或问题(Pytorch实现)

    感知机模型 假设输入空间\(\mathcal{X}\subseteq \textbf{R}^n\),输出空间是\(\mathcal{Y}=\{-1,+1\}\).输入\(\textbf{x}\in \ ...

  9. mysql查询的时候没有加order by时的默认排序问题

    有时候我们执行MySQL查询的时候,查询语句没有加order by,但是发现结果总是已经按照id排序好了的,难道MySQL就是为了好看给我们排序 如上图数据,是我查询了语句 SELECT * from ...

  10. Solution -「Gym 102956A」Belarusian State University

    \(\mathcal{Description}\)   Link.   给定两个不超过 \(2^n-1\) 次的多项式 \(A,B\),对于第 \(i\in[0,n)\) 个二进制位,定义任意一个二元 ...