随笔分类 - 编程语言
摘要:现study目录有三个目录:src、include、obj src目录下有main.c、func1.c include目录下有func1.h //main.c #include "func1.h" #include <stdio.h> int main() { func1(); printf("th
阅读全文
摘要:全局变量和静态全局变量未初始化时,默认值为0; 局部变量未初始化时,其值是未知的;静态局部变量未初始化时,默认值也为0; 所以在定义局部变量的时候最好初始化。
阅读全文
摘要:结构体: struct Student { char name[32]; int age; int sex; char add[32]; }; 上面只是一种数据类型(同int、char基本类型一样),表示是一个结构体,不占用地址空间,只有在定义结构体变量时才分配空间,即struct Student
阅读全文
摘要:int main() { char str1[] = {'h','e','l','l','o'}; char str3[] = "hello"; char str4[5] = "hello"; char *str2 = "hello";//'\0' int len1 = sizeof(str1)/s
阅读全文
摘要:变量访问的两种方式(取值): 1.通过变量名 2.通过变量的地址(指针) int *p;//指针变量p指向一个int类型的地址 指针变量和数组的区别(int *p、int arr[3]): 1. 指针变量指向的地址是可以变的(即p可以指向不同的整型地址),所以p++是可以的; 而数组名是一个常量(即
阅读全文
摘要:普通数组: int arr[5];//数组arr中存放了5个整型数 int int int int int arr[0] arr[1] arr[2] arr[3] arr[4] 指针数组:是一个数组,里面存放的是指针 int *arr1[5];//表示是一个指针数组,里面存着5个整型指针 int *
阅读全文
摘要:可执行文件就是多个目标文件(.o文件)通过链接生成的 预处理(.i文件):宏替换、头文件的展开、条件编译(带#的处理)、去注释 编译(.s文件):语法检测,生成汇编代码 汇编(.o文件):将汇编代码生成二进制文件 链接:找调用函数的地址(一个目标文件中可能有多个函数,我们只有一个函数或几个),通过函
阅读全文
摘要:所有的字符窜都是以‘\0’结束的 sizeof和strlen sizeof()是一个关键字,表示的是操作数所占空间的大小; strlen()是一个函数(参数必须是char *的指针),表示的是字符窜的长度,strlen是通过判断遇到\0来判断字符窜结束 1. int arr1[] = {1,2,3,
阅读全文
摘要:static static有两种使用场景: 1. 修饰变量 修饰局部变量(称为静态局部变量):出了这个变量的作用域后,该变量不会被销毁。该变量存储在静态存储区 修饰全局变量(称为静态全局变量):和普通全局变量的区别在于这个被static修饰的全局变量不能在其他源文件中使用,(即不能在其他源文件中用e
阅读全文
摘要:在一个c程序中,将内存分为: 代码区: 常量区:存放的一些常量 静态存储区:存放全局和静态变量 堆: 栈: int a = 0; //全局初始化区 char *p1; //全局未初始化区 main() { int b;// 栈 char s[] = "abc"; //就在栈上 char *p2; /
阅读全文
摘要:一个程序中数据的计算是通过CPU。那么CPU中的数据来自哪里呢? 1. 内存(物理内存):所以一个进程的虚拟内存操作后会通过MMU将虚拟内存中的数据映射到物理内存 2. 寄存器(cpu的寄存器):当一个变量的优化级别较高时,会将变量存到cpu的寄存器中 用信号理解volatile 代码说明: #in
阅读全文
摘要:c程序的内存分配: 执行程序会将程序加载到内存,内存大体上被分为三个区:栈段、堆段、数据段(全局变量和static变量) 栈:局部变量和形式参数会保存在栈区,函数调用完之后,释放栈帧和函数中的局部变量。 堆:堆区空间远大于栈区空间,可自行分配,并在使用完后手动释放内存空间。 数据段:存放全局变量和s
阅读全文