01_c语言再学习_基础部分(1)
阅读原文时间:2023年07月08日阅读:1

目录:

1.编译基础

2.c语言关键字

3.c语言数据类型

4.二进制/8进制/16进制

5.计算机内存数值存储方式:sizeof/原码/反码/补码

6.c语言中的字符和字符串

7.c语言中的数组和字符串(字符数组和字符串)

7.1 数组的逆置,冒泡排序(含优化)

编译基础:

C代码编译成可执行程序经过4步:

1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法

2)编译:检查语法,将预处理后文件编译生成汇编文件

3)汇编:将汇编文件生成目标文件(二进制文件)

4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

#include

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

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

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
#include
#include

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

}
}