内存
从硬件角度:内存实际上是电脑的一个配件(一般叫内存条)。从逻辑角度:内存是这样一种东西,它可以随机访问(随机访问的意思是只要给一个地址,就可以访问这个内存地址)、并且可以读写(当然了逻辑上也可以限制其为只读或者只写);堆(heap):用于存放进程运行中被动态分配的内存段,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减),这个堆概念与数据结构中“堆”的概念不同,只是一个内存区域。忘记释放内存,导致内存泄漏,动态内存的申请与释放必须配对,程序中malloc和free的使用次数一定要相同,否则肯定有错误。
可以使用 sizeof 运算符。表达式 sizeof(xx) 得到对象或类型的存储字节大小,int a 在声明的时候就已经建立了存储空间。常量是固定值,在程序执行期间不会改变,变量其实只不过是程序可操作的存储区的名称。常量存储区是静态存储区域:内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在,例如全局变量,static变量。
void free(void *address);
该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。
void *malloc(int num);
在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
指针使用
#include <stdio.h>
int main ()
{
int var_runoob = 10;
int *p; // 定义指针变量
p = &var_runoob;
printf("var_runoob 变量的地址: %p\n", p);
printf("var_runoob 变量的值: %p\n", *p);
return 0;
}
输出:var_runoob 变量的地址: 0x7ffeeaae08d8
指针变量声明的一般形式为:type *var-name;使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
文件操作
一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件
使用gcc编译
gcc hello.c -o main.out
./main.out
位运算
位运算符
0&0=0;
0&1=0;
1&0=0;
1&1=1;