#include<stdio.h>#include<stdlib.h>main(){int i;
i =3;printf("%d\n", i);printf("%#x\n",&i);system("pause");}
6.内存修改器
#include<stdio.h>#include<stdlib.h>main(){int time =60;int i;printf("%#x\n",&i);for(i = time; i >0; i--){printf("剩余时间为%d\n", i);sleep(2500);}system("pause");}
7.指针
#include<stdio.h>#include<stdlib.h>main(){int i;
i =3;//定义一个指针变量 int* p =&i;//定义一个二级指针 int** q =&p;printf("%d\n", i);printf("%#x\n",&i);printf("%#x\n", p);printf("%d\n",*p);printf("%d\n",**q);system("pause");}
8.常见错误
#include<stdio.h>#include<stdlib.h>main(){int* p;int i =3;double d =3.14;
p =&i;double* q =&d;printf("%#x\n", q);printf("%lf\n",*q);system("pause");}
#include<stdio.h>#include<stdlib.h>main(){//指针长度为4个字节,因为32位环境,内存地址长度就是4 printf("int*的长度是%d\n",sizeof(int*));printf("double*的长度是%d\n",sizeof(double*));int i =3;int j =5;//不是连续空间的地址,不能做指针运算 printf("%#x\n",&i);printf("%#x\n",&j);printf("两个地址的距离%d\n",&i -&j);system("pause");}
14.申请堆内存
#include<stdio.h>#include<stdlib.h>main(){//申请12个字节的堆内存 ,此函数返回堆内存的首地址 int* p =malloc(3*sizeof(int));*(p +1)=3;printf("%d\n",*(p +1));printf("%#x\n", p +1);//释放堆内存 free(p);printf("%d\n",*(p +1));printf("%#x\n", p +1);system("pause");}
15.学号管理系统
#include<stdio.h>#include<stdlib.h>main(){printf("请输入班级人数:");int count;scanf("%d",&count);int i;//申请堆内存保存学生学号int* p =malloc(count *sizeof(int));for(i =1; i <= count; i++){printf("请输入第%d个学生的学号:", i);scanf("%d",(p + i -1));}printf("请输入插班生人数:");int newCount;scanf("%d",&newCount);//重新申请堆内存 //在旧的堆内存后面扩展新的空间 //如果旧的堆内存后面空间都被占用了,那么就无法扩展//系统会另觅他处,寻觅一个足够大的堆内存区域重新申请 //并且会把旧堆内存的数据拷贝至新的堆内存 //最后释放旧的堆内存
p =realloc(p,(count + newCount)*sizeof(int));//输入插班生学号 for(i = count +1; i <= count + newCount; i++){printf("请输入第%d个学生的学号:", i);scanf("%d",(p + i -1));}for(i =1; i <= count + newCount; i++){printf("第%d个学生的学号为%d\n", i,*(p + i -1));}system("pause");}
16.多级指针
#include<stdio.h>#include<stdlib.h>main(){int i =3;int* p =&i;int** q =&p;int*** l =&q;printf("%d\n",&i);printf("%d\n",**q);printf("%d\n",***l);system("pause");}