C语言笔记(3)

来源:互联网 发布:sql 别名的使用 编辑:程序博客网 时间:2024/05/21 01:43

int a; 取a的低8位char(a),取a的8到16位char(a >> 8),取16到32位char(a>> 16)
已经是地址的变量,取其地址,还是它本身值,也就是说没有其他地址来记录已经地址的值的地址。如int a[3],此时的a已经是地址,再对其取地址&a,两次取得的值都是一样,没有其他地址来来存储死的地址。死的地址,记录在文件上,或者由编译器记录
Uint a:1; 位定义域,表示a只用一个字节。这样做可以节省空间。
size + 可执行文件,可是看到可执行文件里各个段的大小。
gcc -c 只编译不链接
objdump -D file.o > file1.s
函数在运行前就可以知道其地址,这里说的地址是虚拟地址,每个进程都有独立的4G虚拟内存,这内存再由kernel映射到物理内存。打印出来的地址都是虚拟的地址。
编译期是将.c文件编译,生成数据,代码段,这一时间已经生成代码的地址,数据的地址,load则是将这些数据,代码下载到虚拟内存.虚拟内存映射到物理地址的大小是文件的大小。
程序运行起来后才有栈和堆。局部变量在文件中不占空间,即文件的大小不包括局部变量的大小
参数从右向左压入栈

申请内存空间后,尽量不要用两个指针同时指向申请的内存,以免使用两次free,从而导致double pointer error;
申请了一块内存,指向内存的指针不要进行运算(++  --),如此以后没会释放。

int a[2][3] 与 int (*p)[3]是等价的都是int (*)[3] 类型,但a是右值,p是左值即不能给a赋值,而p可以

int *p[3]  相当于 p 是int **
int (*pf)(int a, int b) 引用时 ret = (*pf)(a,b)与ret = pf(a,b)都是正确
struct B{
    struct A aa;
    char b;
    double c;
};
union{
    struct A a;
    struce B b;
};
联合体某一时刻只能用一个成员,但B中的首个成员就是A,它们的地址一样。所以访问B的第一个成员还是会访问到联合体中的A,这就是同时访问两个成员的办法
ctags -Rn .
ctrl + p 自动补全。tab键补全。
ctrl + [ 自动查找函数定义
ctrl + t 自动查找后跳转的回来,
ctags 只能在当前目录下用。
,ts + [ 可以
按#,光标所在字会自动高亮。按n向下查找,N向上查找。
在字符上按K,自动查找到帮助文件。
 

原创粉丝点击