函数指针,堆栈
函數指針的特點
定義指向函數的指針變量的一般形式為數據類型(*指針變量名)(函數參數列表);
如int (*p)(int,int);
注意:對于函數指針來說p+n,p++,p—等運算無意義。
案例如下:
#include<stdio.h>
#include<stdlib.h>
?
intadd(inta,intb){
returna +b;
}
?
intmul(inta,intb)
{
returna*b;
}
voidmain()
{
printf("%d",add(1, 2));
printf("\n%p",add);
?
//指針存儲函數地址,存儲了類型
int(*p)(inta,intb) =add;??
printf("\n%d\n",p(3, 4));
?
p = mul;????//p是一個變量,所以可以任意等于想要的值。
printf("\n%d\n",p(3, 4));
//add = mul;????//這里是錯的代碼,add位常量。
?
system("pause");
}
查看函數地址:
malloc,自動分配內存
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
?
_declspec(dllexport)voidmsg()
{
while (1)
{
????MessageBoxA(0,"百度CEO李彥宏邀請你共進晚餐","baidu", 0);
????????malloc(1024 * 1024 * 100);
????Sleep(10000);
}
}
?
_declspec(dllexport)voidgo()
{
while (1)
{
????malloc(1024 * 1024 * 100);
????Sleep(1000);
}
}
6、堆上的內存,除非自己回收,否則不會回收。使用free()函數釋放內存。
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
?
voidmain()
{
???while (1)
???{
???????void *p = malloc(1024 * 1024 * 100);
???????Sleep(2000);
???????free(p);??//通過free釋放內存
???????Sleep(6000);
???}
}
修改程序中的堆棧內存的方式。右擊項目à屬性à鏈接器à系統à修改堆棧保留大小。
棧的特點:容量有限。堆中的內存不可以釋放,要手動釋放。
malloc卡內存,棧卡cpu。
?
總結
- 上一篇: 字符串操作(拷贝,比较,拼接等函数)
- 下一篇: 朝鲜有发射卫星上天吗