经过一周半的学,由C基础上升到了C高级学习过程。C高级学习过程是C基础的过度。学习C语言的高级内容可以帮助我们更深入地理解和应用C语言的各种特性和功能。以下是关于C语言高级学习的一些总结:
- 结构体:
结构体主要如何求定义一个结构体:
Struct student{
char name[20];
int age;
}
定义结构体变量:
Student p={0};
结构体访问:
结构体变量名.成员
p.name
结构体指针变量->成员
struct student *ps=NULL;
ps->name;
- 动态内存管理:
malloc和free
void *malloc(size_t*size);
Stu *ps=NULL;
ps=(Stu *)malloc(sizeof(Stu)*SIZE);
free(ps);
ps=NULL;
- 自定义文件
头文件要加 #ifndef _STU_H #define _STU_H
末尾加 #endif
gcc编译流程:
预编译:(处理以#开头的文件) gcc –E stu.c –o stu.i
编译:(生成汇编语言)gcc –S stu.i –o stu.s
汇编:(将汇编语言转化为机器语言)gcc –c stu.s –o stu.o
链接:(将所有机器语言汇集成一个可执行文件)gcc stu.o –o stu
- 函数指针
a) 一个指向整型数的指针 int *a;
b) 一个指向指针的的指针,它指向的指针是指向一个整型数 int **a;
c) 一个有 10 个整型数的数组 int a[10]
d) 一个有 10 个指针的数组,该指针是指向一个整型数的 int *a[10]
e) 一个指针,该指针指向一个有 10 个整型数的数组 int (*a)[10]
定义一个函数指针,该函数指针指向一个返回值为void,有两个参数,一个为int,一个为char * void (*p)(int char*);
定义一个函数指针数组,该数组中的每一个元素都是一个函数指针,该函数指针指向一个返回值为int,有两个参数为int的函数 int (*p[4])(int int)
Shell命令、shell脚本、shell
Shell命令:用户向内核发送的控制请求,与之交互的文本流
Shell脚本:一堆命令的集合
Shell:是命令行解释器,将用户命令解析为操作系统所能理解的命令,实现用户和操作系统的交互。
用户在命令行提示符下键入命令文本,开始于shell交互;接着,shell将用户的命令或按键转化成内核所能够理解的指令,操作系统做出响应,直到控制相关硬件设备。最后,shell将结果提交给用户。
接下来对测试进行总结:
a是全局变量,extern修饰的全局变量存放在静态区,int a=5说明a已经是5了,带入main函数中再计算,就可以得到第一次传参时a已经是8.
错题原因:不知道全局变量存放在静态区,要用全局变量带入main函数中进行计算。
当程序启动时,全局变量的内存空间会在程序加载到内存中时分配,并且会在main函数执行之前进行初始化。这意味着,全局变量的值在main函数执行之前就已经被确定了。
&&的优先级比||的高,相当于if(a--||(b++&&--c)),从左向后开始执行,a--,先赋值在自减。为真,阶段法则,后面不用执行。所以b和c没有改变值,a自减了1。
P1和p2是指针,指针不能进行字符串的拼接,所以会出现段错误。