------------------------------day--7--内存管理---------------------------------------
系统内核:留给系统的正常运行必不可少的栈:编写的程序运行时存放变量的堆:数据段:存放全局变量,常量的代码段:存放编译好的代码2,函数指针:int quadrate(int a);// main中
int a=3;
int (*pquadrate)(int a);
pquadrate = &quadrate;//必须加上“()”才会是指向一个函数的指针!!!
int s = (*pquadrate) (a);
//最后就相当
//int s = quardrate(a);
------------------------------day--8--数组声明和内存排序---------------------------------------
1,x/nd:0x7fffffffde1cx:为要打印输出的内存地址n:要打印输出几个内存的值d:按十进制显示2,指针常量和指针变量:int arr[10];int p=arr;其中arr为指针常量*p为指针变量
------------------------------day--9--预处理宏函数和typedef---------------------------------------
.c文件-->.i文件-->.s文件-->.o文件-->可执行文件 预处理 编译 汇编 链接 1,预处理://生成预处理文件gcc -o hello.i hello.c -E2,宏定义:#define R 10//编译的时候把R替换为103,宏函数:代码实例:#include<stdio.h>#define R 20#define M int main(#define N(n) n*10#define ADD(a,b) a+b//define ADD(a,b) (a+b)int add (int a,int b){ return a+b;}typedef int tni;//把int * 替换为ptypedef int *p;//相当于 int *q = NULL;p q = NULL; M){ int a=R; printf("a=%d\n",a); printf("helloworld\n"); int b= N(a);//int b= a*10; printf("b=%d\n",b); int c=add(a,b); printf("c=%d\n",c); int d=ADD(a,b); printf("d=%d",d);
//int e = a+b*a+b; int e = ADD(a,b)*ADD(a,b); printf("e=%d",d); return 0;}输出结果:a=20helloworldb=220c=220e=4220宏不考虑C语言语法,只做替换功能另外一个实例:#include<stdio.h>
#define M int main(#define add(a,b) (a+b)M){ //如果去掉M编译会出错,原因??? int a = 123; ------ int b = 1; | int c = add(a,b); | printf("a = :%d\n",a); | printf("c = %d\n",c); | return 0; |} ∨#define N int main( //这里必须换行分开,否则编译会报错,此处"N"相当于"int main("#define add(a,b) (a+b)//在此处的宏定义函数,就相当于在"int amin()"之前定义的一样N){ //此处的"N"被替换成“int main(”连起来就和"int main()"一样 int a = 123456789; printf("a = :%d\n",a); return 0;} ****能够正确执行*****
/* *******错误的例子*****define M (M*10)int main(){ int aa = M; printf("aa = %d\n",aa);
return 0;}*/*******编译错误********3,typedef:------------------------------day--10--结构体数组和结构体指针---------------------------------------
结构体总大小 *****************************************结构体长度的计算:
如结构体:
struct data{
int a;
char b;
char c;
};
int a的长度为4,偏移量为0,0是4的整数倍,不用填充;
char b的长度为1,偏移量为4,4是1的整数倍,不用填充;
char c的长度为1,偏移量为5,5是1的整数倍,不用填充;
整个结构体目前占用的总空间为6,结构体中最长的元素为int a(4个字节),而6不是4的整数倍,所以需要填充2个字节,最后结构体的长度为8个字节。
*****************************************#include<stdio.h>struct weapon{ char name[20]; int atk; int price;}; int main(){ int a = 0; float b=0.0;
//定义weapon_1结构体变量,并初始化列表 struct weapon weapon_1 = {"weapon_name,100,200"}; printf("%s\n",weapon_1.name);
//结构体数组 struct weapon weapon_2[2] = {"weapon_name1",50,100,"weapon_name2",100,200}; printf("%s\n,%d\n",weapon_2[0].name,weapon_2[1].name); //结构体指针 struct weapon * w; w=&weapon_1; //注意此处,(*w)的"()"不能省略,(*w).name相当于w->name printf("%s\n,%d\n",(*w).name); return 0;}------------------------------day--11--共用体---------------------------------------
#include<stdio.h>//共用体所有成员共享同一块地址union data{ int a; char b; int c;}
int main(){ union data data_1; data_1.b='C'; data_1.a=10;//此处的data_1.a=10;会将data_1.b覆盖掉 printf("%p",&a);//%p表示打印一个指针 return 0;}